{"id":22859195,"url":"https://github.com/lacatoire/docker-compose-symfony-ssl","last_synced_at":"2025-05-07T08:43:23.100Z","repository":{"id":267305018,"uuid":"863502202","full_name":"lacatoire/docker-compose-symfony-ssl","owner":"lacatoire","description":"This repository demonstrates a project setup using Docker Compose, Symfony, and MySQL with SSL/TLS connection support for secure database interactions.","archived":false,"fork":false,"pushed_at":"2024-12-09T15:49:39.000Z","size":22,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-31T08:19:43.945Z","etag":null,"topics":["docker","docker-compose","mysql","php","ssl","symfony"],"latest_commit_sha":null,"homepage":"https://www.itefficience.com/","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lacatoire.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-26T12:06:54.000Z","updated_at":"2025-01-09T16:56:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"aa0bc7ee-08bc-4c18-87c7-15aaf1ccef22","html_url":"https://github.com/lacatoire/docker-compose-symfony-ssl","commit_stats":null,"previous_names":["lacatoire/docker-compose-symfony-ssl-mysql"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lacatoire%2Fdocker-compose-symfony-ssl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lacatoire%2Fdocker-compose-symfony-ssl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lacatoire%2Fdocker-compose-symfony-ssl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lacatoire%2Fdocker-compose-symfony-ssl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lacatoire","download_url":"https://codeload.github.com/lacatoire/docker-compose-symfony-ssl/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252846054,"owners_count":21813363,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","mysql","php","ssl","symfony"],"created_at":"2024-12-13T09:06:23.560Z","updated_at":"2025-05-07T08:43:23.078Z","avatar_url":"https://github.com/lacatoire.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# ⚡ Symfony Docker-Compose with SSL (MySQL \u0026 PostgreSQL) 🐳🔒\n\nThis repository demonstrates a project setup using `Docker Compose`, `Symfony`, and secure database interactions with both `MySQL` and `PostgreSQL`, leveraging SSL/TLS connection support.\n\n---\n\n## 🔧 **Prerequisites**\n\nBefore running the project, ensure that you have the following installed:\n- [🐳 Docker](https://www.docker.com/)\n- [📦 Docker Compose](https://docs.docker.com/compose/)\n\n---\n\n## 📂 **Project Structure**\n\n```plaintext\n.\n├── docker-compose.mysql.yml    # Docker Compose configuration for MySQL\n├── docker-compose.postgres.yml # Docker Compose configuration for PostgreSQL\n├── app/                        # Symfony project directory\n│   ├── .env                    # Symfony environment configuration\n│   ├── config/                 # Symfony config files\n│   └── ...\n├── certs/                      # MySQL SSL certificate directory\n│   ├── server-key.pem          # MySQL server private key\n│   ├── server-cert.pem         # MySQL server certificate\n│   ├── ca-cert.pem             # Certificate Authority (CA) certificate\n└── README.md                   # Project documentation\n```\n\n---\n\n## ⚙️ **Getting Started**\n\n### 1️⃣ **Clone the repository**\n\n```bash\ngit clone https://github.com/lacatoire/docker-compose-symfony-ssl\ncd docker-compose-symfony-ssl\n```  \n\n---\n\n### 2️⃣ **Generate SSL certificates**\n\n#### 🐬 **For MySQL**\nFollow these steps to generate self-signed SSL certificates for MySQL:\n\n```bash\n# Build Docker image\ndocker build -t docker-openssl:latest .docker/openssl\n\n# Run Docker container in interactive mode\n# Make sure you replace `\u003cyour_path\u003e` with your target folder, this is where files will be created.\n\n# For Docker Desktop (Windows Pro)\ndocker run -it --rm -v \"C:\\your_path\\certs:/certs\" docker-openssl\n\n# For Docker Toolbox (Windows Home/linux/mac)\ndocker run -it --rm -v \"$YOUR_PATH/certs:/certs\" docker-openssl\n```\nAnd then once connected\n```bash\nmkdir -p certs\ncd certs\n    \n# Generate private key\nopenssl genrsa 2048 \u003e server-key.pem\n    \n# Generate Certificate Authority (CA) certificate\nopenssl req -new -x509 -nodes -days 3650 -key server-key.pem -out ca-cert.pem\n    \n# Generate server certificate\nopenssl req -new -key server-key.pem -out server-cert.csr\nopenssl x509 -req -in server-cert.csr -CA ca-cert.pem -CAkey server-key.pem -CAcreateserial -out server-cert.pem -days 3650\n```\n\n#### 🐘 **For PostgreSQL**\nSame process applies, but store the files in the `certs/postgres/` directory.\n\n---\n\n### 3️⃣ **Configure the environment**\n\nUpdate the `.env` file in the Symfony project:\n\n```dotenv\n# For MySQL\nDATABASE_URL=\"mysql://db_user:db_password@database_app:3306/db_name?sslmode=required\"\n\n# For PostgreSQL\nDATABASE_URL=\"postgresql://db_user:db_password@database_app:5432/db_name\"\n```\n\n---\n\n### 4️⃣ **Set up the Docker environment**\n\nRun the following command to build and start the containers:\n\n```bash\ndocker-compose up --build\n```  \n\nThis will:\n- Start a MySQL/PostgreSQL container with SSL enabled.\n- Start a Symfony application container.\n### Configure Doctrine\n\nIn the config/packages/doctrine.yaml file, add the SSL options for MySQL:\n```yaml\n\ndoctrine:\n  dbal:\n    driver: 'pdo_mysql'\n    url: '%env(resolve:DATABASE_URL)%'\n    options:\n      1007: '%env(MYSQL_SSL_KEY)%' \n      ## or !php/const PDO::MYSQL_ATTR_SSL_KEY: '%env(MYSQL_SSL_KEY)%'\n      \n      1008: '%env(MYSQL_SSL_CERT)%'\n      ## or !php/const PDO::MYSQL_ATTR_SSL_CERT: '%env(MYSQL_SSL_CERT)%'\n            \n      1009: '%env(MYSQL_SSL_CA)%'\n      ## or !php/const PDO::MYSQL_ATTR_SSL_CA: '%env(MYSQL_SSL_CA)%'\n      \n      1014: false\n      ## or !php/const PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT: false\n```\nYou will add these variables in your .env\n```dotenv\nMYSQL_SSL_KEY=/certs/server-key.pem\nMYSQL_SSL_CERT=/certs/server-cert.pem\nMYSQL_SSL_CA=/certs/ca-cert.pem\n```\nFor PostGres\n```yaml\ndoctrine:\n    dbal:\n      driver: 'pdo_pgsql'\n      url: '%env(DATABASE_URL)%'\n      server_version: '12.2'\n      sslmode: 'verify-ca' # 'verify-full' for production\n      sslrootcert: '%env(POSTGRES_SSL_CA)%'\n      sslcert: '%env(POSTGRES_SSL_CERT)%'\n      sslkey: '%env(POSTGRES_SSL_KEY)%'\n```\nYou will add these variables in your .env\n```dotenv\nPOSTGRES_SSL_KEY=/certs/server-key.pem\nPOSTGRES_SSL_CERT=/certs/server-cert.pem\nPOSTGRES_SSL_CA=/certs/ca-cert.pem\n```\n\n### 5️⃣ **Test your setup**\n\n#### ✅ **For MySQL**\n```bash\ndocker exec -it database_app mysql -u db_user -p   --ssl-ca=/etc/certs/ca-cert.pem   --ssl-cert=/etc/certs/server-cert.pem   --ssl-key=/etc/certs/server-key.pem db_name\n```  \n\n#### ✅ **For PostgreSQL**\n```bash\ndocker exec -it database_app psql -U db_user -d db_name   --set=sslrootcert=/etc/certs/ca-cert.pem   --set=sslcert=/etc/certs/server-cert.pem   --set=sslkey=/etc/certs/server-key.pem\n```  \nRun the following query to validate SSL:\n```sql\nSELECT ssl_is_used FROM pg_stat_ssl WHERE pid = pg_backend_pid();\n-- Output: 'true' if SSL is enabled\n```\n\n#### ✅ **From Symfony**\n```bash\ndocker exec -it php_app php bin/console doctrine:schema:update --dump-sql --complete\n```\n\n---\n\n## 🛠 **Troubleshooting**\n\n1. Ensure the SSL certificates are correctly generated and placed in the `certs/` directory.\n2. For PostgreSQL, ensure the `sslmode` is set to `verify-ca` (or `verify-full` for production).\n3. Check the CN of your server certificate matches `database_app`.\n\n---\n\n## 📜 **License**\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n\nInterested in training with our team? [Contact us!](https://www.itefficience.com/contact)  \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flacatoire%2Fdocker-compose-symfony-ssl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flacatoire%2Fdocker-compose-symfony-ssl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flacatoire%2Fdocker-compose-symfony-ssl/lists"}