Cette fois ** Docker </ font> **, ** CircleCI </ font> **, ** AWS < J'ai appris à partir de zéro la popularité croissante des technologies d'infrastructure telles que / font> ** et j'ai essayé de créer une application Web. Le back-end est ** Laravel </ font> **, et le front-end est ** Vue.js </ font> **.
Dans cet article, les points sur lesquels j'ai eu du mal à développer l'application, Je voudrais présenter les articles et le matériel pédagogique auxquels j'ai fait référence lors de la mise en œuvre de chaque fonction.
C'est une application SNS avec le thème des activités matinales.
Sur la base de ce concept, nous avons développé un service appelé ** "Asa Kotsu" ** avec le mot "activité matinale". L'URL est ici ↓. Si vous le souhaitez, n'hésitez pas à le déplacer ^^
URL de l'application: https://pf.asakotsu.com/ (* La prise en charge des smartphones n'étant pas encore terminée, il est recommandé de naviguer sur un PC ^^;)
URL GitHub: https://github.com/ngsw877/asakotsu
Première page (liste des publications et classement, etc.)
Liste des articles par tag
Détails de l'article et liste de commentaires
Zoomer la liste des réunions
Écran des détails de l'utilisateur
Au lever tôt
DEFILEMENT infini
Fondamentalement, c'est un SNS avec des messages, des commentaires, des likes et des fonctions comme Twitter, De plus, c'est une application avec les fonctionnalités suivantes.
l'extrémité avant
Vue.js 2.6.11
jQuery 3.4.1
HTML / CSS / Sass / MDBootstrap
__ Backend __
PHP 7.4.9
Laravel 6.18.36
PHPUnit 8.5.8
ZoomAPI (guzzlehttp/guzzle 7.0.1)
Infrastructure
CircleCi
Docker 19.03.12 / docker-compose 1.26.2
nginx 1.18
mysql 5.7.31 / PHPMyAdmin
AWS ( EC2, ALB, ACM, S3, RDS, CodeDeploy, SNS, Chatbot, CloudFormation, Route53, VPC, EIP, IAM )
La logique côté serveur est programmée en PHP / Laravel La conception détaillée du front-end a été arrangée avec Sass, et quand j'ai voulu ajouter du mouvement, je l'ai implémentée avec Vue.js et jQuery. Utilisez Docker / docker-compose pour l'environnement de développement Pour le pipeline CI / CD, nous avons réalisé un test automatisé avec CircleCI J'essaie de réaliser un déploiement automatique avec CodeDeploy d'AWS.
J'utilise Docker / docker-compose
pour l'environnement de développement, et j'utilise des conteneurs aux quatre fins suivantes.
Lien de référence:
[Comment créer un environnement d'exécution Laravel + Vue (environnement LEMP) avec Docker qui n'échoue jamais ~ Partie 1 ~](https://qiita.com/shimotaroo/items/29f7878b01ee4b99b951#8docker-composeyml%E3%82%B3 % E3% 83% B3% E3% 83% 86% E3% 83% 8A% E3% 81% AE% E8% A8% AD% E5% AE% 9A% E3% 83% 95% E3% 82% A1% E3 % 82% A4% E3% 83% AB% E3% 82% 92% E4% BD% 9C% E6% 88% 90% E3% 81% 99% E3% 82% 8B)
Je voulais déployer avec ECS sur AWS dans l'environnement de production, Abandonné en raison d'une difficulté élevée ... Pour le moment, je me suis habitué à l'expérience de déploiement sur EC2, donc cette fois j'ai procédé en construisant un environnement sur EC2.
J'utilise ACM (AWS Certificate Manager) parce que je voulais émettre un certificat SSL et réaliser une conversion HTTPS.
En plus d'EC2, ALB (ELB)
et CloudFront
sont également nécessaires pour utiliser ACM, j'ai donc décidé d'introduire ALB cette fois.
Bien qu'ALB soit utilisé, ~~ pour économiser de l'argent ~~ À l'heure actuelle, on ne s'attend pas à ce qu'il ait suffisamment d'accès pour distribuer la charge ou augmenter la charge, donc une seule instance EC2 est préparée.
De plus, même s'il y a une marque de verrouillage sur la barre d'adresse, les fichiers css et js ne seront pas lus ou le routage ne sera pas converti en https à moins que vous ne définissiez le proxy côté Laravel, alors soyez prudent. ..
Lien de référence:
S3 est préparé pour les deux objectifs suivants.
Stockez la source créée avec CircleCI
Stockez les données d'image téléchargées par l'application sur EC2
Concernant 2, il y avait quelque chose d'inattendu à faire, comme la définition de la politique de compartiment de S3 et l'installation du package pour S3 du côté Laravel.
Lien de référence:
En liant «CodeDeploy» à «SNS» et «Chatbot», les notifications sont envoyées au compte Slack au début et à la fin du déploiement automatique. Très pratique.
__ Lié à l'inscription de l'utilisateur __
Nouvelle inscription, fonction d'édition de profil
Fonctions de connexion et de déconnexion
Fonction de connexion facile (connexion de l'utilisateur invité)
__ Intégration de l'API Zoom __
Activité du matin Fonction de réunion Zoom (CRUD)
Nouvelle réunion, liste, modification, fonction de suppression
__ Fonction de jugement pour obtenir une augmentation précoce __
L'heure de réveil cible peut être définie pour chaque utilisateur (de 4h00 à 10h00)
Si vous pouvez publier avant l'heure de réveil cible, le record de réussite du réveil précoce augmentera d'un jour.
__ Fonction de classement des réalisations au réveil précoce de l'utilisateur (tous les mois) __
__ Fonction de défilement infini __ (jQuery / inview.js / ajax)
__ Lié aux messages de l'utilisateur (CRUD) __
__ Fonction de commentaire __
__ Fonction de balise __ (Entrée Vue.js / Vue Tags)
__ Comme la fonction __ (Vue.js / ajax)
__ Suivez la fonction __
__ Fonction d'affichage de message flash __ (jQuery / Toastr)
Afficher des messages flash lors de la publication, de la modification, de la suppression, de la connexion et de la déconnexion
__ Fonction de téléchargement d'image __ (compartiment AWS S3)
__PHPUnit test __
nom de la table | Explication |
---|---|
users | Informations sur les utilisateurs enregistrés |
follows | Suivant/Informations sur les abonnés |
achievement_days | Gérez la date à laquelle l'utilisateur s'est levé tôt et l'a réalisée comme historique |
meetings | Informations sur la réunion Zoom créées par l'utilisateur |
articles | Informations publiées par les utilisateurs |
tags | Informations sur la balise de publication de l'utilisateur |
article_tags | Tableau intermédiaire entre l'article et les balises |
likes | Aime les informations pour les messages |
comments | Informations de commentaire pour les messages des utilisateurs |
Le wake_up_time
dans la ** table users ** signifie ** l'heure de réveil cible ** de l'utilisateur.
Si l'utilisateur peut publier plus tôt que cette heure, le réveil précoce de la journée sera atteint.
De plus, il convient de noter
"L'heure de réveil cible est 07h00, et j'ai posté à 01h00 à minuit."
Et ainsi de suite, l'utilisateur a posté trop tôt
Même dans certains cas, il est réglé de manière à ne pas être réalisé tôt.
En tant que mécanisme, la valeur de range_of_success
dans la ** table des utilisateurs ** est utilisée.
c'est,
"Combien d'heures avant l'heure de réveil cible doivent être affichées pour obtenir un réveil anticipé, un entier représentant la plage"
est.
La valeur par défaut est «3», par exemple, si l'heure de réveil cible est définie sur ** 07: 00 **, 3 heures avant
Si vous pouvez poster entre ** 04h00 et 07h00 **, vous vous lèverez tôt.
Si vous parvenez à vous réveiller tôt de cette manière, la date de la date de réussite sera enregistrée comme historique dans date
de la table ** achievement_days **.
Exemple) 2020-11-22
Les fonctions suivantes sont réalisées en utilisant ces données de date.
** ① Calculez le nombre de jours pour vous lever tôt chaque mois ** ** ② Fonction de classement en utilisant le nombre de jours en ① **
Au début, je pensais me lever tôt ** en continuant ** dans le classement du nombre de jours, mais Dans l'optique de maintenir la motivation des utilisateurs, nous avons décidé d'adopter des jours ** mensuels ** de réveil précoce ** de réalisation **.
J'ai eu du mal avec des erreurs dans chaque processus, du développement au déploiement, mais w, Voici quelques-uns des points les plus mémorables.
Je souffrais de beaucoup d'erreurs lors de la configuration de config.yml. .. Surtout lorsque vous spécifiez des commandes et des chemins, il est important de comprendre où commence la racine du chemin. En guise de contre-mesure lorsque le test a échoué, j'ai essayé de résoudre la cause en me connectant SSH dans le conteneur intégré et en vérifiant le journal des erreurs.
Lien de référence: Debug using SSH
Comme mentionné ci-dessus, [Émission d'un certificat SSL](#### Émission d'un certificat SSL) [Télécharger dans le compartiment S3](#### Télécharger dans le compartiment S3) J'avais tendance à devenir accro aux erreurs autour de moi. De plus, cette fois, j'ai décidé de déployer avec EC2 au lieu d'ECS, mais après la connexion SSH à EC2 Il y avait de nombreux fichiers à installer et à configurer, et le travail autour d'eux était difficile. Compte tenu de ce processus, je voulais être capable de gérer de plus en plus ECS ^^;
Au début, j'ai eu du mal avec les relations. Quelle table est associée à quelle table et comment obtenir les informations associées? Aussi,
Par exemple, j'ai senti que la différence entre les deux était également un point important.
Concernant le code de test PHPUnit, j'ai eu du mal à collecter des informations car je ne trouvais aucune information qui pouvait être apprise systématiquement.
J'ai décidé d'ajouter une fonction pour créer et modifier des réunions Zoom depuis l'application, Comme je n'avais jamais utilisé d'API externe auparavant, j'avais du mal à comprendre les choses grammaticales et le mécanisme de communication API.
En implémentation, c'est un client PHP HTTP pour communiquer avec l'API Zoom dans Laravel. J'ai installé ** Guzzle **.
Lien de référence:
Ensuite, enregistrez l'application sur Zoom App Marketplace et lisez le document officiel, mais en anglais, quelle page dois-je consulter au début? J'ai eu du mal sans le savoir. .. ^^;
Laravel présente un exemple de code pour le traitement qui communique avec l'API Zoom. En me référant à des articles d'outre-mer, j'ai progressivement pu trouver les informations nécessaires dans les documents officiels.
Lien de référence:
Cependant, comme je développais cette fois une application sur la série Laravel 6, j'ai eu du mal car je ne pouvais pas utiliser le wrapper Guzzle qui peut normalement être utilisé sur la série Laravel 7, et j'ai dû réécrire un peu le code.
En gros, j'ai appris avec ** Udemy ** et ** Techpit **. Ces deux sont très faciles à comprendre. Personnellement, j'ai pensé qu'il valait mieux apprendre les bases chez Udemy et ensuite bouger les mains avec Techpit en version avancée.
Docker / docker-compose
PHPUnit / CircleCI / AWS
AWS
Laravel
Laravel / Vue.js
Sass
Il y a encore de nombreux problèmes, mais je voudrais les améliorer un par un et les rafraîchir.
Cela a été un long article, mais merci d'avoir lu jusqu'ici! ^^