clone de kintone? J'étais assez accro au lancement de l'extension OSS WebDB avec Lightsail + Docker, alors prenez-en note.

Exment c'est quoi?

2020-09-08_11h46_18.png Exment est un système de base de données Web créé par Laravel (c'est-à-dire LAMP, ce qui signifie qu'il fonctionne également sur des serveurs de location). Vous pouvez exploiter une base de données relationnelle à partir de l'écran de gestion GUI.

Exment est OSS et est une licence GPL. Le développement est centré sur Kajitori Co., Ltd. Pour plus de détails, consultez Article du développeur.

Quand vous pensez à GUI Web DB, vous pourriez penser au kintone de Cybozu.

Je n'entends même pas le caractère kintone du développeur, mais je pense secrètement que c'est un clone de kintone, et je pense que c'est un produit OSS avec un potentiel considérable.

Pour être honnête, j'aime beaucoup ça, mais je n'expliquerai pas mes points préférés dans cet article. À une autre occasion.

Je souhaite exploiter Exment le moins cher possible dans le cloud!

Localement, vous pouvez Essayer Exment avec Docker. Merci de l'avoir fait!

Quand je l'ai essayé localement (confirmé avec macOS Mojave et Windows 10 Home WSL2), c'était facile. C'est incroyable.

Ensuite, c'est dans la nature humaine de vouloir l'héberger dans le cloud et d'y accéder de l'extérieur.

J'ai pensé à diverses destinations d'hébergement. Pour le front-end uniquement, il existe des services gratuits tels que Netlify et Vercel, mais malheureusement c'est un système back-end ...

Comme mentionné précédemment, Exment peut également être exploité sur un serveur de location.

La procédure d'installation avec Rensaba comme Sakura et le serveur X est publiée sur le site officiel d'Exment, mais malheureusement, le compte de Sakura et du serveur X est ouvert. Je ne l'ai pas. En d'autres termes, je n'ai pas de contrat Rensaba. (Netlify et Vercel ont des produits personnels qui sont à proximité de la réception.)

Je me demande s'il est possible de louer un Rensaba juste pour Exment, alors VPS n'est-il pas meilleur? À la suite de diverses enquêtes, j'ai réalisé que Lightsail d'Amazon était parfait pour mon utilisation.

(L'auteur est VPS, AWS vierge à ce stade)

Créez maintenant un compte Lightsail et lancez-vous!

De la connexion à Lightsail à la création d'une instance, les articles suivants sont détaillés.

Cette fois, j'ai choisi l'instance de RAM 512 Mo la moins chère à 3,5 $ / mois. Le thème est d'être le moins cher possible. Si les spécifications ne suffisent pas, il s'agit de passer à l'échelle et de réfléchir à la façon de les gérer.

Lightsail a un modèle d'instance qui est un ensemble d'applications Web telles que WordPress, mais bien sûr, il n'y a pas de modèle Exment qui soit encore bien connu.

Par conséquent, sélectionnez une instance de système d'exploitation uniquement. Cette fois, j'ai choisi CentoOS7.

Voulez-vous l'installer sur CentOS? Ou ...?

Exment publie officiellement la procédure d'installation sur CentOS 7, et il y a aussi un article pour la renforcer. (Voir ci-dessous)

Cependant, comme vous pouvez le voir dans la formule, il y a plusieurs étapes. Donc, je l'ai fait une fois. En train d'abandonner l'environnement et de recommencer plusieurs fois, "Je ne peux pas faire cette procédure à chaque fois!"

** Non, pourquoi ne pas simplement mettre Docker dessus? ** **

Exécutez Exment avec Lightsail + Docker (https est également disponible!)

À partir de là, je décrirai la procédure, y compris les solutions de contournement basées sur les points addictifs. Si vous suivez ceci, vous pouvez obtenir l'extension sur Lightsail + Docker dans les plus brefs délais.

Après avoir créé une instance sur CentOS7, installez Docker, Docker-compose et git

Ensuite, je vais tout installer.

Il est difficile de mettre sudo à chaque fois, alors je deviens root.

Pour devenir root avec Lightsail, je me suis référé à cet article.

$ sudo su -

Installez Docker. Cet article est détaillé.

[root@ip-172-xx-xx-x ~]# yum install -y docker          #installation de docker
[root@ip-172-xx-xx-x ~]# service docker start           #Démarrer docker
[root@ip-172-xx-xx-x ~]# groupadd docker                #Rendre possible l'exécution avec les privilèges de l'utilisateur
[root@ip-172-xx-xx-x ~]# usermod -g docker centos       #Ajouter un utilisateur centos au groupe créé
[root@ip-172-xx-xx-x ~]# sudo /bin/systemctl restart docker.service
[root@ip-172-xx-xx-x ~]# docker info        

Vous avez maintenant installé Docker. Vient ensuite Docker-compose.

[root@ip-172-xx-xx-x ~]# curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
[root@ip-172-xx-xx-x ~]# chmod +x /usr/local/bin/docker-compose
[root@ip-172-xx-xx-x ~]# docker-compose --version

Enfin, installez Git. Le Git fourni avec yum de CentOS7 est la 1.8.2 et l'ancienne version. Si vous êtes intéressé, veuillez vous référer à l'article ci-dessous et en ajouter un nouveau. Cette fois, je veux juste git clone, donc je vais l'installer avec yum tel quel.

[root@ip-172-xx-xx-x ~]# yum install -y git

Vous avez maintenant installé Git également.

Créer un espace de swap

Comme il s'agit d'une instance de 512 Mo de RAM, j'ai manqué de mémoire lorsque je suis passé à MySQL avec Docker. (Point addictif 1), créons donc d'abord une zone d'échange.

Je me suis référé à l'article suivant pour savoir comment faire un échange.

[root@ip-172-xx-xx-x ~]# dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress

J'étais assez accro car j'ai fait une erreur en écrivant la commande (addiction point 2)

C'est un bon souvenir que je ne savais pas quel fichier / dev / zero était et rm -rf en cours d'essais et d'erreurs.

J'ai fait référence à cet article pour relancer / dev / zero.

[root@ip-172-xx-xx-x ~]# mknod -m 666 /dev/zero c 1 5
[root@ip-172-xx-xx-x ~]# chown root:mem /dev/zero

L'option status = progress, mais cette fois, la zone d'échange est aussi grande que 4G, donc je crains que le terminal reste silencieux pendant un certain temps. J'ai donc ajouté une option pour vous informer de la progression de la commande dd. Je me réfère à l'article suivant.

Une fois l'espace d'échange créé avec dd, continuez le reste du travail en silence.

[root@ip-172-xx-xx-x ~]# chmod 600 /swapfile #Modifier les autorisations
[root@ip-172-xx-xx-x ~]# mkswap /swapfile #Créer un swap
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=d0519bf6-8abf-4c0d-9375-8068c9e5e9a1
[root@ip-172-xx-xx-x ~]# swapon /swapfile #Activation du swap
[root@ip-172-xx-xx-x ~]# free -m #Confirmation du swap

Enfin, rendez le swap persistant. Ouvrez / etc / fstab avec vi et

/swapfile                                 swap                    swap    defaults        0 0

C'est ça.

Utilisez git clone pour récupérer docker-compose.yml et Dockerfile.

Prise en charge sur Github de la personne qui a créé Docker of Exment présenté plus tôt.

[root@ip-172-xx-xx-x /home/centos/]# git clone https://github.com/yamada28go/docker-exment.git

Je pense que l'emplacement peut être n'importe où, mais je l'ai fait directement sous le répertoire utilisateur par défaut.

Et https?

Quand il s'agit de https dans Docker, https-portal semble être célèbre.

Tout d'abord, lorsque j'ai installé l'extension avec ** https-portal défini en premier, cela n'a pas fonctionné! !! !! (Point addictif 3) **

Donc, avant de configurer SSL, procédez à l'installation d'Exment dans l'état non SSL.

Voulez-vous lire docker-compose.yml pour le moment?

docker-compose.yml


version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - 8080:80
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      - www-data:/var/www
    depends_on:
      - php

  php:
    build: ./php
    volumes:
      - www-data:/var/www
    depends_on:
      - db

  db:
    image: mysql:5.7
    ports:
      - 13306:3306
    volumes:
      - mysql-data:/var/lib/mysql
    environment:
      MYSQL_DATABASE: exment_database
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_USER: exment_user
      MYSQL_PASSWORD: secret

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - 8888:80
    depends_on:
      - db

#Définir les volumes
volumes:
  #Spécifiez le nom du volume
  #Chemin d'installation d'Exment
  www-data:
    #Réglez la ture pour spécifier un volume qui a déjà été créé en dehors de Compose.
    #Puis docker-Compose n'essaie pas de créer du volume lors de la composition.
    #Et si le volume spécifié n'existe pas, une erreur sera générée.
    #external: true
  #chemin d'installation de mysql db
  mysql-data:

Étant donné que https-portal utilisera le port 80 plus tard, il est pratique que nginx soit 8080. En particulier, je ne modifierai rien en l'état.

docker-compose.yml et Dockerfile ne touchent à rien, mais seul php.ini ajoute une ligne.

Sur la dernière ligne

memory_limit=-1

J'ajouterai (point supplémentaire 4, les détails seront décrits plus tard)

Finalement ...

[root@ip-172-xx-xx-x /home/centos/]# docker-compose up -d

Comme c'est la première fois, il obtiendra l'image, la construira et créera le volume.

Une fois le démarrage terminé, utilisez docker-comopse ps pour vérifier que tous les conteneurs sont actifs. (MySQL sortait ici quand je ne faisais pas d'échange)

Après avoir démarré en toute sécurité, accédons avec l'adresse IP

Effectuez les étapes suivantes du côté Lightsail.

Essayez d'accéder à xx.xx.xx.xx: 8080 avec un navigateur, et si l'écran initial de Laravel s'affiche, il réussit.

L'accès à xx.xx.xx.xx: 8080 / admin vous amènera à l'écran d'initialisation d'Exment.

L'écran se compose de trois parties

  1. Spécifiez la langue et le fuseau horaire
  2. Paramètres de la base de données
  3. Bouton de démarrage du réglage DB

Il y a 3 écrans. Ce que vous entrez est le paramètre DB sur le deuxième écran.

Puisque j'utilise Docker, remplissez les paramètres en vous référant à l'article "J'ai essayé de créer un environnement Docker pour Exment".

--Nom de l'hôte → db --Nom de la base de données → extension_database --Nom d'utilisateur → extension_user --Mot de passe → secret

Après cela, si l'installation est terminée avec succès, l'écran initial d'Extension s'affichera.

Je veux enregistrer les fichiers joints dans S3!

L'instance Lightsail a cette fois une zone de stockage de 20 Go, il est donc agréable de déplacer quelque chose, mais c'est une capacité qui deviendra bientôt un bang si vous insérez des données binaires.

Exment a la possibilité d'enregistrer divers fichiers sur un service de stockage externe.

C'est un gros problème, alors préparons-le sur AWS et sauvegardons-le dans S3.

S3 était aussi vierge, j'ai donc fabriqué un seau en me référant à l'article suivant.

Des paramètres sont également requis du côté d'Exment. Allez dans le conteneur qui contient déjà docker-compose exec php bash.

[root@ip-172-xx-xx-x /home/centos/]# docker-compose exec php bash

Vous pouvez maintenant le mettre dans le conteneur php où Extension est en cours d'exécution. Si l'invite change en quelque chose comme ça, vous réussissez.

root@f54bef27801a:/var/www#

En d'autres termes, il a une double structure d'être dans le conteneur Docker php dans Lightsail sur le cloud.

Continuez à modifier le fichier Exment (Laravel) en lisant "Changer la destination de sauvegarde des fichiers (avancés)".

Modifiez / ajoutez le fichier .env dans le dossier racine d'Exment avec vim.

.env


EXMENT_DRIVER_EXMENT=s3
EXMENT_DRIVER_BACKUP=s3
EXMENT_DRIVER_TEMPLATE=s3
EXMENT_DRIVER_PLUGIN=s3

AWS_ACCESS_KEY_ID=(Clé d'accès AWS S3)
AWS_SECRET_ACCESS_KEY=(Clé d'accès secrète AWS S3)
AWS_DEFAULT_REGION=(Région AWS S3)

AWS_BUCKET_EXMENT=(Bucket AWS S3 à utiliser dans les pièces jointes)
AWS_BUCKET_BACKUP=(Bucket AWS S3 utilisé pour la sauvegarde)
AWS_BUCKET_TEMPLATE=(Bucket AWS S3 utilisé dans le modèle)
AWS_BUCKET_PLUGIN=(Bucket AWS S3 à utiliser avec le plug-in)

Il n'est pas nécessaire de définir tous les EXMENT_DRIVER_xxx, uniquement ceux qui doivent être définis. Vous n'avez besoin que du AWS_BUCKET_xxx nécessaire qui lui est associé.

Je voulais enregistrer les pièces jointes et sauvegarder les données dans S3,

J'ai mis seulement 4 de.

Enfin, installez la bibliothèque avec composer.

Auparavant, j'ai édité php.ini avant docker-compose up -d, mais Composer consomme de la mémoire et atteint bientôt la limite d'utilisation de la mémoire de PHP, donc je l'ai réglé pour lever cette limite. fait.

Composer prend beaucoup de temps à installer, il est donc douloureux qu'il ait échoué à cause du temps ... (j'étais très triste), alors vérifiez à nouveau ce paramètre avant de faire composer require Faisons le.

root@f54bef27801a:/var/www# php -i | grep memory_limit
memory_limit => -1 => -1

Si c'est -1, c'est OK. (Cela signifie qu'il n'y a pas de limite de mémoire)

Il est maintenant temps d'installer la bibliothèque

root@f54bef27801a:/var/www# composer require league/flysystem-aws-s3-v3 ~1.0 -vvv

L'option -vvv est une instruction qui signifie se connecter dans les moindres détails. L'installation de Composer prend beaucoup de temps, donc je m'inquiète si le terminal reste silencieux pendant une longue période.

Donc, je m'assurerai de sortir les journaux un par un. Si vous êtes resté silencieux pendant longtemps avec cette option, c'est vraiment soit arrêté pour une raison quelconque, soit vous faites beaucoup de travail difficile ...

Ceci termine les paramètres d'option pour le téléchargement des fichiers joints vers S3. Assurez-vous d'avoir le fichier dans votre bucket en téléchargeant une image appropriée.

Enfin, la malédiction https ...

Non, il n'y a rien de mal avec https, mais j'en étais tellement accro ...

Je me suis demandé s'il y avait quelque chose qui n'allait pas, et je l'ai réinstallé à partir de l'environnement Docker complètement abandonné, donc cela a pris beaucoup de temps.

Comme je l'ai dit plus tôt, si vous mélangez https-portal avec docker-compose, l'installation initiale échouera. En fin de compte, j'ai rencontré une erreur peu claire et suis resté bloqué.

J'ai dit qu'il y avait 3 écrans pour l'installation, mais lorsque j'appuie sur le bouton d'installation sur le dernier 3ème écran, cet écran d'erreur grisâtre de Laravel apparaît.

Use of undefined constant STDIN - assumed 'STDIN' (this will throw an Error in a future version of PHP)

Je suis sorti et je n'ai pas pu insérer de données dans la base de données. J'ai abandonné ici car je ne suis pas familier avec PHP et Laravel.

Comme http fonctionnait bien, j'ai abandonné après tout la suppression de cette erreur et je suis passé à la stratégie consistant à terminer l'installation avec http, puis à passer à https.

Ajouter https-portal à docker-compose.yml

Exportez uniquement la partie https-portal.

docker-compose.yml


https-portal:
  image: steveltn/https-portal:1
  ports:
    - '80:80'
    - '443:443'
  links:
    - nginx
  restart: always
  volumes:
    - ./certs:/var/lib/https-portal
  environment:
    STAGE: 'production'
    DOMAINS: >-
      example.com -> http://nginx:8080
  depends_on:
    - php

Il n'y a rien de particulièrement difficile. Ce n'est pas très différent de l'échantillon officiel. Le fait est que si «STAGE:» de «enviroment:» n'est pas «production» ou «staging», vous ne pourrez pas obtenir le certificat de ce Chan de Let's Encrypt. Si cela n'est pas spécifié comme local, un certificat sera émis car il s'agit d'un développement local. C'était aussi un simple point addictif (point addictif 5)

Enfin, si vous visitez https://example.com/ et que l'écran initial de Laravel s'affiche, ce sera très bien et réussi ...

Je voudrais dire, mais il y en a encore.

Lorsque vous accédez à https://example.com/admin, l'écran se réduit considérablement!

En regardant la console du navigateur, tous les CSS / JS provenant de http dans un contenu mixte sont bloqués.

Au début, je ne savais pas comment gérer cela, mais après essais et erreurs, Laravel et Laravel-admin étaient déterminés à être les coupables! Il semble que le chemin avec http soit affiché à la description comme asset ('/ css / hoge.css') ...

Voici des mesures à cet égard. Aussi, faites docker-compose exec php bash pour entrer.

/var/www/exment/.env


APP_ENV=production

/var/www/exment/app/Providers/AppProvider.php


class AppServiceProvider extends ServiceProvider
    public function boot()
    {
    if (config('app.env') === 'production') {
       \URL::forceScheme('https'); //Schéma, pas schéma!!!(Point addictif 6)
    }
    }

/var/www/exment/config/admin.php


    /*
    |--------------------------------------------------------------------------
    | Access via `https`
    |--------------------------------------------------------------------------
    |
    | If your page is going to be accessed via https, set it to `true`.
    |
    */
    'https' => env('ADMIN_HTTPS', true), //← La valeur par défaut est false, alors définissez-la sur true!

Désormais, tous les actifs sont livrés à partir de https et affichés sans casser l'écran.

Pour être honnête, je ne sais pas si c'est vraiment la bonne réponse. Peut-être que AppProvider.php n'est pas nécessaire ... Il semblait que la manière d'écrire le code était légèrement différente selon la version de Laravel. La réalité est que j'ai lu beaucoup de sources de référence et réussi à m'installer dans un code fonctionnel.

Si vous avez un meilleur moyen, veuillez nous le faire savoir dans les commentaires.

Maintenant, cela fonctionne en toute sécurité!

Jusqu'ici, ça marche de bonne humeur.

Sécurité etc.

Cet article n'aborde pas la sécurité, etc. pour créer un environnement à des fins de vérification. Si vous le connaissez, je vous serais reconnaissant de bien vouloir le compléter.

à partir de maintenant

Je veux écrire un article qui complimente la partie merveilleuse d'Exment!

Recommended Posts

clone de kintone? J'étais assez accro au lancement de l'extension OSS WebDB avec Lightsail + Docker, alors prenez-en note.
J'étais un peu accro à la comparaison S3 Checksum, alors prenez note.
Une histoire dans laquelle j'étais accro à la conversion de type implicite d'ActiveRecord lors du test unitaire
J'ai été inspiré par l'article destiné aux nouveaux arrivants, alors prenez-en note pour ne pas oublier votre intention initiale
J'ai créé une application d'apprentissage automatique avec Dash (+ Docker) part2 ~ Façon basique d'écrire Dash ~
Je veux créer un bouton avec un saut de ligne avec link_to [Note]
Une note quand j'étais accro à la conversion d'Ubuntu sur WSL1 en WSL2
Une histoire à laquelle j'étais accro à deux reprises avec le paramètre de démarrage automatique de Tomcat 8 sur CentOS 8
[Java débutant] J'ai une compréhension un peu plus approfondie de "Il est temps d'utiliser le nouveau", alors prenez note
Problèmes auxquels j'étais accro lors de la création de l'environnement digdag avec docker
[Mise à jour] Il était difficile de passer de la série httpclient 3.x à la version 4.5, je vais donc rédiger un résumé des modifications
J'ai créé une application d'apprentissage automatique avec Dash (+ Docker) part3 ~ Practice ~
Rails6 Je veux créer un tableau de valeurs avec une case à cocher
SpringSecurity J'étais accro à essayer de me connecter avec un mot de passe haché (résolu)
J'ai essayé de cloner une application Web pleine de bugs avec Spring Boot
J'étais accro à faire onActivityResult () avec DialogFragment
Comme je l'utilise souvent, je note les choses liées à DB sur Android.
Ce à quoi j'étais accro lors du développement d'une application Spring Boot avec VS Code
Lors de la création d'une application personnelle, je me demandais si je devais la faire en utilisant haml
J'ai essayé de créer une fonction de message de l'extension Rails Tutorial (Partie 1): Créer un modèle
Notez que j'étais accro aux paramètres du projet Android d'IntelliJ IDEA
J'ai lu le code lisible, alors prends note
J'étais accro au record du modèle associé
J'ai essayé de faire une fonction de réponse de l'extension Rails Tutorial (Partie 3): Correction d'un malentendu des spécifications
Une note gênante lorsque vous essayez d'utiliser nginx avec des conteneurs distants de vscode
J'ai essayé de créer une fonction de message pour l'extension Rails Tutorial (Partie 2): Créer un écran à afficher
Lorsque j'ai essayé d'exécuter Azure Kinect DK avec Docker, il a été bloqué par le CLUF
[Terraform] Docker résout le délai d'expiration lors de la tentative de création de ressources Azure sur une machine Windows