R
Railway8mo ago
emua12

docker deployment

Hi, sorry, I have a question. I want to upload a project to Railway that I have in a repository. Inside the repository, I have a container where I have the database, and that generates another one where I have the project. I'm new to Docker, so I'm not sure how it works exactly, but I know that I run 'sudo docker compose up -d' and it generates 2 containers. Then, inside the container, I have to run some Laravel-specific commands. My question is how to do this with Railway
223 Replies
Percy
Percy8mo ago
Project ID: N/A
emua12
emua12OP8mo ago
N/A
Brody
Brody8mo ago
please share the compose file and all the commands you need to run and where
emua12
emua12OP8mo ago
emua12
emua12OP8mo ago
when i clone the commands are sudo docker compose up -d that generates 2 dockers, pgscomputacion and scomputacion-1 sudo docker exec -it scomputacion-1 bash and then compose install
Brody
Brody8mo ago
well first off, your dockerfile should be doing compose install
emua12
emua12OP8mo ago
mmm how? composer install* I do the composer install inside the container, after docker exec -it bash
Brody
Brody8mo ago
do it in your dockerfile via RUN
emua12
emua12OP8mo ago
okey ill see how
emua12
emua12OP8mo ago
after the composer install i do this
No description
Brody
Brody8mo ago
you'd do all the artisan stuff in the dockerfile too, and you might not need chown at all
emua12
emua12OP8mo ago
like this?
No description
Brody
Brody8mo ago
you should not be doing multiple updates and installs, condense all apt stuff into a single command
emua12
emua12OP8mo ago
like this?
No description
emua12
emua12OP8mo ago
Oh, one more thing I also do BEFORE the php artisan commands is cp .env.example .env and in the .env file I set db_host=pgscomputacion, db_port=5432, db_database=taller, db_user=postgres, db_password=postgres
Brody
Brody8mo ago
yeah that's looking much better, but since you need the database variables in the dockerfile you need to reference them in the dockerfile with ARG you'd set those in your service variables
emua12
emua12OP8mo ago
how?
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
I do not know if it is ok
Brody
Brody8mo ago
you had it right in the first screenshot, you dont need the ENV stuff
emua12
emua12OP8mo ago
ok, only that, and now?
Brody
Brody8mo ago
does your app need postgres 14? would 16 work?
emua12
emua12OP8mo ago
I really don't know... It should work, I just use Laravel's eloquent for relationships and create/delete records, nothing complicated
Brody
Brody8mo ago
okay then cant hurt to try 16 do you already have a railway project?
emua12
emua12OP8mo ago
No, I had created it and deleted it because I didn't know how to do it
Brody
Brody8mo ago
well then lets walk through the steps
emua12
emua12OP8mo ago
so I started from 0
Brody
Brody8mo ago
create an empty project and name it and please send screenshots at every step of the way
emua12
emua12OP8mo ago
from a github repo right?
Brody
Brody8mo ago
nope, we hardly ever want to do that
an empty project
please make sure to carefully read my messages
emua12
emua12OP8mo ago
sorry,
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
add a postgres database
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
create a new empty service
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
name it and deploy it
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
can you copy and paste the ARGs you have in your dockerfile for me
emua12
emua12OP8mo ago
ARG DB_HOST ARG DB_PORT ARG DB_DATABASE ARG DB_USERNAME ARG DB_PASSWORD
Brody
Brody8mo ago
open up your service's raw editor and paste this in -
DB_HOST=${{Postgres.PGHOST}}
DB_PORT=${{Postgres.PGPORT}}
DB_DATABASE=${{Postgres.PGDATABASE}}
DB_USERNAME=${{Postgres.PGUSER}}
DB_PASSWORD=${{Postgres.PGPASSWORD}}
DB_HOST=${{Postgres.PGHOST}}
DB_PORT=${{Postgres.PGPORT}}
DB_DATABASE=${{Postgres.PGDATABASE}}
DB_USERNAME=${{Postgres.PGUSER}}
DB_PASSWORD=${{Postgres.PGPASSWORD}}
and then deploy it
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
and just this once no screenshot, click their eye icons to make sure they all show properly
emua12
emua12OP8mo ago
yes are the same of postgres
Brody
Brody8mo ago
did you have any other environment variables that you need to set for it?
emua12
emua12OP8mo ago
my .env file has more things but idk if are necesary APP_NAME=Laravel APP_ENV=local APP_KEY=base64:NP+/oB4Sc1mx4ISoyM6LECEJoLn2/gmQD9oe1zF8hwc= APP_DEBUG=true APP_URL=http://localhost LOG_CHANNEL=stack LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug DB_CONNECTION=pgsql DB_HOST=pgscomputacion DB_PORT=5432 DB_DATABASE=taller DB_USERNAME=postgres DB_PASSWORD=postgres BROADCAST_DRIVER=log CACHE_DRIVER=file FILESYSTEM_DISK=local QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 MEMCACHED_HOST=127.0.0.1 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=smtp MAIL_HOST=mailpit MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="[email protected]" MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= AWS_USE_PATH_STYLE_ENDPOINT=false PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_HOST= PUSHER_PORT=443 PUSHER_SCHEME=https PUSHER_APP_CLUSTER=mt1 VITE_APP_NAME="${APP_NAME}" VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" VITE_PUSHER_HOST="${PUSHER_HOST}" VITE_PUSHER_PORT="${PUSHER_PORT}" VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" i didnt touch anything of these, only the db things
Brody
Brody8mo ago
well add everything that is necessary to your service variables
emua12
emua12OP8mo ago
I add all that on the service?
Brody
Brody8mo ago
but the syntax changes from ${PUSHER_HOST} to ${{PUSHER_HOST}} yes
emua12
emua12OP8mo ago
VITE_APP_NAME="${{APP_NAME}}" VITE_PUSHER_APP_KEY="${{PUSHER_APP_KEY}}" VITE_PUSHER_HOST="${{PUSHER_HOST}}" VITE_PUSHER_PORT="${{PUSHER_PORT}}" VITE_PUSHER_SCHEME="${{PUSHER_SCHEME}}" VITE_PUSHER_APP_CLUSTER="${{PUSHER_APP_CLUSTER}}" like that
Brody
Brody8mo ago
yep, no quotes though but ${{APP_NAME}} isnt going to do anything unless you have also set APP_NAME as well
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
and always make sure you check them with the eye icon
emua12
emua12OP8mo ago
I don't know, I didn't touch any of that, just the db stuff and nothing else, I left everything else as is
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
its ok
Brody
Brody8mo ago
awsome now set PORT=80
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
go into its settings and generate a domain
emua12
emua12OP8mo ago
done
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
and i assume you have the dockerfile and your app in a repo right?
emua12
emua12OP8mo ago
yes
Brody
Brody8mo ago
okay then go ahead and connect your repo
emua12
emua12OP8mo ago
herE?
No description
Brody
Brody8mo ago
yep
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
deploy
emua12
emua12OP8mo ago
building
Brody
Brody8mo ago
let me know how that goes
emua12
emua12OP8mo ago
it keeps
No description
Brody
Brody8mo ago
we shall wait
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
use the bookmarklet please
emua12
emua12OP8mo ago
im trying i dont understand, where do I have to drag the download logs?
Brody
Brody8mo ago
to the bookmarks bar
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
you will want to enable the bookmarks bar
Brody
Brody8mo ago
your dockerfile needs to also install the composer cli before running the composer command
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
?
Brody
Brody8mo ago
i dont know php and the php eco system, so you tell me lol, is that how you install composer?
emua12
emua12OP8mo ago
I really don't know hahaha I don't know about this myself, they gave me a container made and I only did everything in Laravel hahaha chat gpt will help me
Brody
Brody8mo ago
it would definitly be beneficial to learn the php ecosystem
emua12
emua12OP8mo ago
It seems that if it is done that way yes, its good. i´ll push
Brody
Brody8mo ago
sounds good
emua12
emua12OP8mo ago
done try to build again?
Brody
Brody8mo ago
yeah push your changes to github
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
fail again
Brody
Brody8mo ago
Composer could not find a composer.json file in /var/www/scomputacion
Composer could not find a composer.json file in /var/www/scomputacion
emua12
emua12OP8mo ago
Sure. The composer.json file is inside the src folder, but I run composer install from inside the container, after having run sudo docker exec -it scomputacion-1 bash
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
please make sure you have the composer.json file in the correct location
emua12
emua12OP8mo ago
GitHub
GitHub - valeno12/SComputacion
Contribute to valeno12/SComputacion development by creating an account on GitHub.
emua12
emua12OP8mo ago
thats the repository, its in src
Brody
Brody8mo ago
yep i saw, please make sure you have the composer.json file in the correct location
emua12
emua12OP8mo ago
It's okay, it has to be there I mean, whenever I raised the project it was there and I had no problem. In my local project it is there
Brody
Brody8mo ago
then you are in the wrong working directory in your dockerfile https://docs.docker.com/reference/dockerfile/#workdir
emua12
emua12OP8mo ago
but there is one thing I don't understand, railway creates the containers? or how does that work?
Brody
Brody8mo ago
railway builds and runs the container, but your dockerfile defines how the container is built
emua12
emua12OP8mo ago
I am raising the container in my premises to see if it works for me
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
building the docker container is easier than letting railway do it if you have the means to do that
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
:/
Brody
Brody8mo ago
same thing maybe your dockerfile runs that command in the wrong directory
emua12
emua12OP8mo ago
yes but i dont understand
Brody
Brody8mo ago
read the docs section I linked
emua12
emua12OP8mo ago
i read it but i dont understand. Look, the old dockerfile works correctly, but the new doesnt
No description
emua12
emua12OP8mo ago
i mean, the old dockerfile doesnt have the run composer install comand, but the route is supposed to be the same
Brody
Brody8mo ago
you can't assume it's going to work the same when you aren't using docker compose, and you don't have ssh into the container so you need to set everything up beforehand in your dockerfile
emua12
emua12OP8mo ago
FROM php:8.2-apache Define las variables de entorno para la base de datos usando ARG ARG DB_HOST ARG DB_PORT ARG DB_DATABASE ARG DB_USERNAME ARG DB_PASSWORD Instala las dependencias necesarias para Laravel RUN apt-get update && apt-get install -y \ libzip-dev \ zip \ unzip \ git \ zlib1g-dev \ libpng-dev \ libpq-dev \ libicu-dev \ libxslt1-dev \ g++ \ libfreetype6-dev \ libjpeg62-turbo-dev \ libpng-dev \ libxml2-dev \ librabbitmq-dev \ libssh-dev \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* Instala Composer RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer Copia el código de tu aplicación Laravel al directorio /var/www/html COPY src /var/www/scomputacion Configura el directorio de trabajo WORKDIR /var/www/scomputacion Copia el archivo composer.json COPY src/composer.json /var/www/scomputacion/composer.json Instala extensiones de PHP RUN docker-php-ext-install zip pdo_mysql gd pdo_pgsql intl xsl opcache mysqli pdo pdo_mysql soap Instala APCu RUN pecl install apcu && docker-php-ext-enable apcu Instala extensiones adicionales RUN pecl install amqp && docker-php-ext-enable amqp Configura Apache RUN a2enmod rewrite Ejecutar composer install RUN composer install Ejecutar comandos de Artisan de Laravel RUN php artisan migrate:fresh --seed RUN php artisan key:generate RUN php artisan optimize:clear Expone el puerto 80 para que puedas acceder a la aplicación desde tu navegador EXPOSE 80 Inicia Apache cuando se inicia el contenedor CMD ["apache2-foreground"] i did that but idk ill try
Brody
Brody8mo ago
make sure you enclose code in triple back ticks
emua12
emua12OP8mo ago
well its seem its working
No description
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
now try on railway
emua12
emua12OP8mo ago
ok
Brody
Brody8mo ago
what even is pecl?
emua12
emua12OP8mo ago
good question RUN pecl install apcu installs the APCu extension using the pecl package manager. RUN docker-php-ext-enable apcu enables the installed APCu extension within the PHP environment inside the Docker container.
Brody
Brody8mo ago
it's going to be quite difficult to deploy your app if you aren't familiar with the technologies involved I would recommend getting familiar with all the technologies involved, because I don't know php so I'm only able to really help with the railway side of things
emua12
emua12OP8mo ago
At work, I was given this container to develop something in Laravel that is still in progress. Simultaneously, I started working on this project, and at work, they recommended that I use the same container since I was also going to use Laravel, but I don't know what it has. I just spun up the project and programmed but I'm not in charge of uploading to production so I don't know what the procedure is like, I only program, I did this on my own that's why I don't know how to take it to production
Brody
Brody8mo ago
just learning the language can only get you so far, i can not express how important it is to know the ecosystem too but with that said, i think your last error might not be your doing, i just saw someone else get the exact same error and i know their deployment was working before
emua12
emua12OP8mo ago
I know, it's My first work, i start like 3 months ago and im learning But in this case im lost
Brody
Brody8mo ago
try re-deploying, Google might have had some network troubles
emua12
emua12OP8mo ago
ok, builiding
emua12
emua12OP8mo ago
same error?
Brody
Brody8mo ago
emua12
emua12OP8mo ago
ok, but that clean the db. It only runs once right?
Brody
Brody8mo ago
it shouldn't wipe anything, but as always with uncertainty make sure to check that yourself
emua12
emua12OP8mo ago
Hello, yesterday I had to go. Failed again
Brody
Brody8mo ago
can you show me the code that connects to the database?
emua12
emua12OP8mo ago
Laravel does that, it is not done manually, you just put the data in the .env
Brody
Brody8mo ago
but you still define the variables laravel uses in code, dont you?
emua12
emua12OP8mo ago
DB_CONNECTION=pgsql I was missing that in the railway variables
Brody
Brody8mo ago
i figured it was something like that
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
It's taking a long time, it's good, at least it doesn't fail xd
Brody
Brody8mo ago
unoptimized dockerfile most likely
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
It didn't fail, but if I see the logs it says that
Brody
Brody8mo ago
looks like you ran into the build time limit of the trial plan
Brody
Brody8mo ago
>> RUN pecl install amqp && docker-php-ext-enable amqp

No releases available for package "pecl.php.net/amqp"
install failed
>> RUN pecl install amqp && docker-php-ext-enable amqp

No releases available for package "pecl.php.net/amqp"
install failed
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
try to do docker compose up -d locally and it throws that error. From what I saw, it is normal because the database is not created until the container that has Postgres is finished being created. But on railway there should not be this problem The important thing is that it did not throw the pecl install amqp error
Brody
Brody8mo ago
yeah because it didnt get to that stage yet
emua12
emua12OP8mo ago
No, the php artisan is the last instruction Look the blue text, the install amqp executed correctly
Brody
Brody8mo ago
gotcha but it didnt on railway, meaning there is an issue with your dockerfile
emua12
emua12OP8mo ago
But how, it's the same dockerfile
Brody
Brody8mo ago
^
emua12
emua12OP8mo ago
But how can it be that this line operates locally and not on the railway? It is not a dockerfile problem because it works for me
Brody
Brody8mo ago
im sorry but working locally does not mean its a platform issue
emua12
emua12OP8mo ago
try again without changing anything
Brody
Brody8mo ago
^
emua12
emua12OP8mo ago
same error?
Brody
Brody8mo ago
i think we should pick this back up when you are more familiar with the php ecosystem, im sorry i couldnt help you further
emua12
emua12OP8mo ago
but here he throw another error From what I see the problem is that you cannot run the php artisan from there
Brody
Brody8mo ago
its due to a config issue, im sorry as i dont know php my usefulness has ran out
emua12
emua12OP8mo ago
but there is no way to throw those commands after the build has finished? like a railway console
Brody
Brody8mo ago
you can do it in your start command sure
emua12
emua12OP8mo ago
i delete the php artisan commands, building again
Brody
Brody8mo ago
well you can't just delete them this is why i suggested coming back to this when you are more familiar with the php eco system
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
any variable you use during build needs to be referenced with ARG https://docs.railway.app/guides/dockerfiles#using-variables-at-build-time and now your database is likely not migrated
emua12
emua12OP8mo ago
php artisan are exclusive Laravel commands, they are for executing internal commands. They can be done at any time. At any time I run the php artisan migrate and it generates the database, it does not have to be with the creation of the project
Brody
Brody8mo ago
but railway does not provide ssh
emua12
emua12OP8mo ago
That's what I meant with the railway console
Brody
Brody8mo ago
there is no such thing you can use railway run but that only runs the command locally with the service variables available your best options are to run them in the dockerfile or in the start command
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
i found that in a forum
Brody
Brody8mo ago
you arent using nixpacks
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
ill try to do that
Brody
Brody8mo ago
it was not my suggestion to use nixpacks
emua12
emua12OP8mo ago
But I'm seeing that many people solve it that way, how can I do it?
Brody
Brody8mo ago
maybe you have forgotten to use an ARG
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
^ ^
emua12
emua12OP8mo ago
true
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
but failed in the next instruction
Brody
Brody8mo ago
file_get_contents(/var/www/scomputacion/.env): Failed to open stream: No such file or directory
file_get_contents(/var/www/scomputacion/.env): Failed to open stream: No such file or directory
i think it would be beneficial if you where to also look at the build logs when something fails
emua12
emua12OP8mo ago
I see them from the page but from that file I can't find where the error is reported chown -R www-data:www-data /var/www/scomputacion/public chown -R www-data:www-data /var/www/scomputacion/storage/ /var/www/scomputacion/bootstrap/ ln -s /var/www/scomputacion/public /var/www/html I think I should add that to the dockerfile as well.
Brody
Brody8mo ago
your code should not be trying to load a .env file
emua12
emua12OP8mo ago
Now I had a problem, I tried to raise it again but it won't let me because the tables are trying to be created again because in the previous deployement that line worked, how can I delete the database?
Brody
Brody8mo ago
you would need to have the migration command do nothing if the migrations have already been ran
emua12
emua12OP8mo ago
Ok, but one question I have. Does the system have to stay on all the time? That is, it never stops? I thought you could choose to turn it off and on whenever you want, but if every time I turn it on it has to generate the dockerfile I think it will be a problem
Brody
Brody8mo ago
you want app sleeping?
emua12
emua12OP8mo ago
The app is probably used once a week, to upload orders. We want to do a one-month trial to check that the system works correctly but the free trial does not allow you to have the system running for the entire month, the monthly hours are limited, we thought it could be turned off and on so that it does not consume hours
Brody
Brody8mo ago
theres no hour limit on the trial plan?? the only limit is the amount of resources and the trial credits you got
emua12
emua12OP8mo ago
So I was misinformed. I had read that you could only keep it on a certain number of hours per month.
Brody
Brody8mo ago
indeed, no time limit, only credit and resource limit but you could run out of resources before the end of the month, i dont know how much resources your app and database will use
emua12
emua12OP8mo ago
No description
emua12
emua12OP8mo ago
I have to put the permission commands. In theory it worked but that's what I get
Brody
Brody8mo ago
put them in the start command then
emua12
emua12OP8mo ago
i put this #Permisoschown -R www-data:www-data /var/www/scomputacion/public RUN chown -R www-data:www-data /var/www/scomputacion/public RUN chown -R www-data:www-data /var/www/scomputacion/storage/ /var/www/scomputacion/bootstrap/ RUN ln -s /var/www/scomputacion/public /var/www/html but keeps :/
Brody
Brody8mo ago
^
emua12
emua12OP8mo ago
chown -R www-data:www-data /var/www/scomputacion/public && chown -R www-data:www-data /var/www/scomputacion/storage/ /var/www/scomputacion/bootstrap/ && ln -s /var/www/scomputacion/public /var/www/html
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
in your dockerfile
emua12
emua12OP8mo ago
this is in the dockerfile
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
as the start command, not RUN
emua12
emua12OP8mo ago
like this?
No description
Brody
Brody8mo ago
no the start command in a dockerfile is equivalent to the last CMD
emua12
emua12OP8mo ago
No description
Brody
Brody8mo ago
please try your best to read my messages so that i can avoid repeating myself
emua12
emua12OP8mo ago
i did this but the error keeps
No description
Brody
Brody8mo ago
^
Want results from more Discord servers?
Add your server