# phCD Continuous Deployment for PHC projects. ## Development ```bash # First install the dependencies $ pnpm install # Run the local server $ pnpm dev # Build all $ pnpm build ``` ## Production Setup Run the following command to bootstrap a **phCD** instance. As this service doesn't have auth for now, it's strongly recommended to publish only on a local ip like `127.0.0.1` and then access directly or via an ssh tunnel (something like `ssh -L 8080:127.0.0.1:8080 server`). ```bash # Clone this repo git clone https://git.phc.dm.unipi.it/phc/phcd # Create config files and data folder mkdir data.local cp .env.sample .env echo 'deploys: []' > config.yaml # Built docker image docker built . -t phcd # Start container docker run -d \ --name phcd \ --restart unless-stopped \ -p 127.0.0.1:8080:4321 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v ./data.local:/app/data.local \ -v ./.env:/app/.env \ -v ./config.yaml:/app/config.yaml \ phcd ``` ### Updating Just pull changes and update the docker image, then use the command from before to restart the main container. ```bash git pull docker stop phcd docker rm phcd docker built . -t phcd ``` ### TODO: Self-Updating It should be possible to deploy itself using a git+dockerfile deployment. For now this is more complicated as this requires to stop itself and spawn a new docker container of itself. ~~**Idea 1.** Create another `self-update.Dockerfile` that also gets mounted `/var/run/docker.sock`, this new container will then run the previous commands~~ [...] if we want the volume to be a folder this cannot be easily done ## Architecture Everything is stored in the `config.yaml` file. This file contains a list of projects to deploy and the configuration for each one. ```yaml deploys: - name: project1 url: https://github.com/username/project1 ref: type: branch value: main type: dockerfile options: ports: - 80:8080 volumes: - /var/www/html:/var/www/html - name: project2 url: ssh://example.org/username/project2.git ref: type: commit value: '1234567' type: docker-compose options: path: ./docker-compose.yml # already the default - name: project3 url: https://github.com/username/project3 type: shell options: path: ./deploy.sh # already the default ```