Esta guía te muestra cómo dejar una instancia EC2 (Ubuntu 24.04) lista para usar CodeIgniter 4 con Apache, PostgreSQL y HTTPS.
✨ 1. Requisitos Previos
- Una instancia EC2 Ubuntu 24.04 corriendo
- Acceso SSH a la instancia (archivo
.pem
) - Un dominio apuntando a la IP de tu instancia (para usar HTTPS)
- Puertos 22, 80 y 443 abiertos en el grupo de seguridad
⚙️ 2. Actualizar el sistema
sudo apt update && sudo apt upgrade -y
🔧 3. Instalar Apache, PHP y extensiones necesarias
sudo apt install apache2 php php-pgsql php-intl php-xml php-mbstring php-curl php-zip php-cli unzip git -y
sudo a2enmod rewrite
📃 4. Instalar PostgreSQL y configurar base de datos
sudo apt install postgresql postgresql-contrib -y
Crear base de datos y usuario:
sudo -u postgres psql
Dentro de psql:
CREATE DATABASE facturacion;
CREATE USER ci4user WITH PASSWORD 'ci4password';
GRANT ALL PRIVILEGES ON DATABASE facturacion TO ci4user;
\c facturacion
ALTER SCHEMA public OWNER TO ci4user;
GRANT USAGE, CREATE ON SCHEMA public TO ci4user;
\q
📁 5. Instalar Composer y CodeIgniter 4
cd /var/www/html
sudo composer create-project codeigniter4/appstarter facturacion
sudo chown -R www-data:www-data facturacion
sudo chmod -R 775 facturacion/writable
🚪 6. Configurar Apache Virtual Host
Edita o crea el archivo:
sudo nano /etc/apache2/sites-available/tusitio.com.conf
Contenido:
<VirtualHost *:80>
ServerName tusitio.com
DocumentRoot /var/www/html/facturacion/public
<Directory /var/www/html/facturacion/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/facturacion_error.log
CustomLog ${APACHE_LOG_DIR}/facturacion_access.log combined
</VirtualHost>
Activar sitio:
sudo a2dissite 000-default.conf
sudo a2ensite tusitio.com.conf
sudo systemctl reload apache2
🔒 7. Instalar Certbot para HTTPS
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d tusitio.com --non-interactive --agree-tos -m admin@tusitio.com --redirect
🔢 8. Configurar CodeIgniter 4 con PostgreSQL
Edita el archivo .env
dentro de /var/www/html/facturacion/
:
database.default.hostname = localhost
database.default.database = facturacion
database.default.username = ci4user
database.default.password = ci4password
database.default.DBDriver = Postgre
database.default.port = 5432
Asegúrate de descomentar las líneas (quitar
#
al inicio)
📆 9. Ejecutar migraciones de CodeIgniter
cd /var/www/html/facturacion
sudo php spark migrate
Si da error de permisos:
sudo chown -R www-data:www-data writable
sudo chmod -R 775 writable
🎉 Resultado Final
Ya puedes acceder a tu sitio en:
https://tusitio.com
Con CodeIgniter 4 funcionando sobre PostgreSQL, Apache y HTTPS en una instancia EC2 Ubuntu 24.04.
🚀 Extras (opcional)
- Usa
php spark serve
para desarrollo local - Configura Git para control de versiones
- Usa
.htaccess
para seguridad y redirecciones
¡Listo! Tienes una pila LAPP (Linux, Apache, PostgreSQL, PHP) totalmente funcional con CodeIgniter 4.
juliocesar20200413
✅ 3. Vuelve a aplicar los permisos (dentro de esa base de datos)
sql
Copiar
Editar
— Reasignar el esquema si es necesario
ALTER SCHEMA public OWNER TO ci4user;
— Permitir que cree objetos (tablas)
GRANT USAGE ON SCHEMA public TO ci4user;
GRANT CREATE ON SCHEMA public TO ci4user;
⚠️ Estos comandos deben ejecutarse dentro de la base de datos a la que se conecta CodeIgniter (ej. facturacion).
✅ 4. Verifica permisos manualmente (opcional)
Aún dentro de psql, prueba esto para ver si ci4user puede crear una tabla:
sql
Copiar
Editar
SET ROLE ci4user;
CREATE TABLE test_perm (id SERIAL PRIMARY KEY);
DROP TABLE test_perm;
RESET ROLE;
Si eso falla, el usuario no tiene permisos correctamente aplicados.
juliocesar20200413
✅ 2. Inicia sesión en PostgreSQL en esa base de datos
bash
Copiar
Editar
sudo -u postgres psql
Ahora conéctate a la base de datos correcta:
sql
Copiar
Editar
\c facturacion
Verás algo como:
sql
Copiar
Editar
You are now connected to database “facturacion” as user “postgres”.
✅ 3. Vuelve a aplicar los permisos (dentro de esa base de datos)
sql
Copiar
Editar
— Reasignar el esquema si es necesario
ALTER SCHEMA public OWNER TO ci4user;
— Permitir que cree objetos (tablas)
GRANT USAGE ON SCHEMA public TO ci4user;
GRANT CREATE ON SCHEMA public TO ci4user;
⚠️ Estos comandos deben ejecutarse dentro de la base de datos a la que se conecta CodeIgniter (ej. facturacion).