Set up Adminer on EC2
November 29, 2024 · AI Conversations
Now I want to add adminer to created database
### Step 1: SSH into Your EC2 Instance
Ensure you're logged into your AWS EC2 instance using SSH:
ssh -i /path/to/your-key.pem ubuntu@your-ec2-ip
### Step 2: Install Adminer
Adminer is a lightweight PHP application, so it's easy to set up.
1. **Create a directory for Adminer** (if it doesn't exist):
sudo mkdir -p /var/www/shareyourthoughts/adminer
2. **Download the latest Adminer PHP file**:
sudo wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php -O /var/www/shareyourthoughts/adminer/index.php
3. **Set appropriate permissions**:
sudo chown -R www-data:www-data /var/www/shareyourthoughts/adminer
sudo chmod -R 755 /var/www/shareyourthoughts/adminer
### Step 3: Configure Apache (or Nginx) to Serve Adminer
If you're using **Apache**, follow these steps:
1. **Create a new Apache configuration file** for Adminer:
sudo nano /etc/apache2/sites-available/adminer.conf
2. **Add the following configuration**:
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/shareyourthoughts/adminer
ServerName your-ec2-ip
<Directory /var/www/shareyourthoughts/adminer>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/adminer_error.log
CustomLog ${APACHE_LOG_DIR}/adminer_access.log combined
</VirtualHost>
3. **Enable the site and restart Apache**:
sudo a2ensite adminer.conf
sudo systemctl reload apache2
If you're using **Nginx**, the steps will differ slightly.
### Step 4: Access Adminer in Your Browser
– Open your web browser and go to:
http://your-ec2-ip/adminer
– You'll see the **Adminer login page**. Enter your database credentials to access it.
### Step 5: Secure Adminer (Optional but Recommended)
For security reasons, it's a good idea to restrict access to Adminer.
1. **Add a `.htaccess` file** (if using Apache):
sudo nano /var/www/shareyourthoughts/adminer/.htaccess
2. **Add the following content** to restrict by IP:
<IfModule mod_authz_core.c>
Require ip YOUR_IP_ADDRESS
</IfModule>
3. **Enable `.htaccess` in Apache** (if not already enabled):
sudo a2enmod rewrite
sudo systemctl restart apache2
Now, only your IP address can access Adminer.
### Step 6: Cleanup
Always ensure your EC2 instance is secure by keeping packages updated:
sudo apt update && sudo apt upgrade -y
You now have **Adminer** set up to manage your database on your AWS EC2 instance.
### Step 1: SSH into Your EC2 Instance
ssh -i /path/to/your-key.pem ubuntu@your-ec2-ip
### Step 2: Create a Directory for Adminer
1. **Create a separate directory for Adminer**:
sudo mkdir -p /var/www/adminer
2. **Navigate to the new directory**:
cd /var/www/adminer
### Step 3: Download Adminer
Download the latest version of Adminer:
sudo wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php -O index.php
### Step 4: Set Permissions
Ensure the web server can access this directory:
sudo chown -R www-data:www-data /var/www/adminer
sudo chmod -R 755 /var/www/adminer
### Step 5: Configure Apache (or Nginx) to Serve Adminer
If you are using **Apache**, follow these steps:
1. **Create a new Apache configuration file for Adminer**:
sudo nano /etc/apache2/sites-available/adminer.conf
2. **Add the following configuration**:
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/adminer
ServerName your-ec2-ip
<Directory /var/www/adminer>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/adminer_error.log
CustomLog ${APACHE_LOG_DIR}/adminer_access.log combined
</VirtualHost>
3. **Enable the new site and disable the default site (if needed)**:
sudo a2ensite adminer.conf
sudo a2dissite 000-default.conf
4. **Restart Apache**:
sudo systemctl reload apache2
### Step 6: Access Adminer
– Open your web browser and navigate to:
http://your-ec2-ip
You should see the Adminer login page.
### Step 7: Secure Adminer (Optional)
For security reasons, it’s good to restrict access to Adminer.
1. **Create a `.htaccess` file** in `/var/www/adminer`:
sudo nano /var/www/adminer/.htaccess
2. **Add the following content to limit access by IP**:
<IfModule mod_authz_core.c>
Require ip YOUR_IP_ADDRESS
</IfModule>
3. **Enable `.htaccess` overrides in Apache**:
Make sure your Apache config for Adminer allows `.htaccess` files:
AllowOverride All
4. **Restart Apache**:
sudo systemctl restart apache2
### Step 8: Update System Packages (Optional)
Keep your system up to date:
sudo apt update && sudo apt upgrade -y
Now, **Adminer** should be up and running, accessible at your EC2 IP address, and not interfering with your existing `/var/www/shareyourthoughts` project.
Here's how you can set it up:
### Step 1: SSH into Your EC2 Instance
ssh -i /path/to/your-key.pem ubuntu@your-ec2-ip
### Step 2: Create a Directory for Adminer
1. **Create a separate directory for Adminer**:
sudo mkdir -p /var/www/adminer
2. **Navigate to the directory**:
cd /var/www/adminer
### Step 3: Download Adminer
Download the latest version of Adminer:
sudo wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1.php -O index.php
### Step 4: Set Permissions
Ensure the web server can access this directory:
sudo chown -R www-data:www-data /var/www/adminer
sudo chmod -R 755 /var/www/adminer
### Step 5: Configure Apache (or Nginx) to Serve Adminer at `/adminer`
#### For Apache:
1. **Edit your Apache configuration** for your site:
sudo nano /etc/apache2/sites-available/000-default.conf
2. **Add a `Location` directive to serve Adminer at `/adminer`**:
Inside the “ block, add this:
Alias /adminer /var/www/adminer
<Directory /var/www/adminer>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
This will tell Apache to serve Adminer at `http://your-ec2-ip/adminer` without affecting your existing project.
3. **Restart Apache to apply changes**:
sudo systemctl reload apache2
#### For Nginx:
1. **Edit your Nginx configuration** file for your site:
sudo nano /etc/nginx/sites-available/default
2. **Add a location block** to serve Adminer at `/adminer`:
location /adminer {
root /var/www;
index index.php;
}
location ~ ^/adminer/index.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # Adjust for your PHP version
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/adminer/index.php;
include fastcgi_params;
}
3. **Restart Nginx**:
sudo systemctl reload nginx
### Step 6: Access Adminer
Once the changes are applied, you can access Adminer at:
http://your-ec2-ip/adminer
### Step 7: Secure Adminer (Optional)
To restrict access to Adminer for security reasons:
1. **Create a `.htaccess` file** in `/var/www/adminer` (for Apache):
sudo nano /var/www/adminer/.htaccess
2. **Add the following content** to restrict access by IP:
<IfModule mod_authz_core.c>
Require ip YOUR_IP_ADDRESS
</IfModule>
3. **Restart Apache**:
sudo systemctl restart apache2
For **Nginx**, you can add similar access restrictions using `allow` and `deny` directives in your configuration.
### Step 8: Update System Packages (Optional)
Ensure your EC2 instance is up-to-date:
sudo apt update && sudo apt upgrade -y
Now, **Adminer** should be accessible at `http://your-ec2-ip/adminer`, while leaving your existing project untouched.
### Apache Configuration
1. **Edit your Apache site's configuration** to ensure that `/var/www/shareyourthoughts` is the root directory and `/adminer` is aliased to the Adminer directory.
Edit the configuration for your site:
sudo nano /etc/apache2/sites-available/000-default.conf
2. **Add the Alias and Directory configuration for `/adminer`**:
In the “ block, keep your current DocumentRoot as `/var/www/shareyourthoughts`, and then add an `Alias` for `/adminer` pointing to `/var/www/adminer`.
The configuration should look like this:
<VirtualHost *:80>
ServerAdmin admin@example.com
DocumentRoot /var/www/shareyourthoughts
ServerName your-ec2-ip
# Alias for Adminer
Alias /adminer /var/www/adminer
# Directory settings for Adminer
<Directory /var/www/adminer>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Default directory settings for your project
<Directory /var/www/shareyourthoughts>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
3. **Restart Apache**:
After editing the configuration, restart Apache to apply the changes:
sudo systemctl reload apache2
### Nginx Configuration
If you're using **Nginx**, here's how you can set it up to serve both your project and Adminer:
1. **Edit your Nginx configuration file**:
sudo nano /etc/nginx/sites-available/default
2. **Configure the server block**:
In the `server` block, set the root directory to `/var/www/shareyourthoughts` and create a location block for `/adminer`:
Example Nginx config:
server {
listen 80;
server_name your-ec2-ip;
# Root directory for your project
root /var/www/shareyourthoughts;
index index.php index.html index.htm;
# Serve Adminer under /adminer
location /adminer {
root /var/www;
index index.php;
}
# Process PHP files for Adminer
location ~ ^/adminer/index.php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # Adjust for your PHP version
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/adminer/index.php;
include fastcgi_params;
}
# Other PHP configuration for your project
location ~ .php$ {
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # Adjust for your PHP version
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
3. **Restart Nginx**:
After saving the file, restart Nginx:
sudo systemctl reload nginx
### Step 6: Test the Configuration
– Your **main site** should still be accessible at `http://your-ec2-ip`, which is pointing to your `shareyourthoughts` project.
– **Adminer** will now be accessible at `http://your-ec2-ip/adminer`.
### Optional: Secure Adminer (IP Access Restriction)
If you want to restrict Adminer access to specific IPs:
1. **Create a `.htaccess` file** for Apache (or add restrictions in Nginx) inside the `/var/www/adminer` directory:
Example `.htaccess` for Apache:
<IfModule mod_authz_core.c>
Require ip YOUR_IP_ADDRESS
</IfModule>
For **Nginx**, use the `allow` and `deny` directives within the `/adminer` location block:
location /adminer {
root /var/www;
index index.php;
allow YOUR_IP_ADDRESS;
deny all;
}
This way, **your project will open as the root**, and Adminer will be available at **`/adminer`** without affecting your existing setup.
### Step 1: Create a `shareyourthoughts.conf` for Your Project
1. **Create a configuration file for your main project**:
sudo nano /etc/apache2/sites-available/shareyourthoughts.conf
2. **Add the following configuration**:
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName your-ec2-ip
DocumentRoot /var/www/shareyourthoughts
# Directory settings for the main project
<Directory /var/www/shareyourthoughts>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/shareyourthoughts_error.log
CustomLog ${APACHE_LOG_DIR}/shareyourthoughts_access.log combined
</VirtualHost>
### Step 2: Create an `adminer.conf` for Adminer
1. **Create a separate configuration file for Adminer**:
sudo nano /etc/apache2/sites-available/adminer.conf
2. **Add the following configuration to serve Adminer at `/adminer`**:
Alias /adminer /var/www/adminer
<Directory /var/www/adminer>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
### Step 3: Enable Both Sites
1. **Enable the newly created configuration files**:
sudo a2ensite shareyourthoughts.conf
sudo a2ensite adminer.conf
2. **Disable the default site (if necessary)**:
sudo a2dissite 000-default.conf
3. **Reload Apache to apply the changes**:
sudo systemctl reload apache2
### Step 4: Verify the Configuration
– Your **main project** should be accessible at:
http://your-ec2-ip
– **Adminer** should be accessible at:
http://your-ec2-ip/adminer
### Optional: Checking the Apache Configuration
To ensure there are no syntax errors, you can run:
sudo apachectl configtest
If the output says `Syntax OK`, your configuration is good to go.
### Optional: Secure Adminer with IP Restriction
If you want to restrict access to Adminer, you can add IP-based access control in your `adminer.conf`:
1. **Update `/etc/apache2/sites-available/adminer.conf`**:
<Directory /var/www/adminer>
Options Indexes FollowSymLinks
AllowOverride All
Require ip YOUR_IP_ADDRESS
</Directory>
2. **Reload Apache**:
sudo systemctl reload apache2
This setup ensures that:
– **`/var/www/shareyourthoughts`** is the root of your main site.
– **Adminer** is available at `/adminer` without affecting your main project.
### How to Disable a Site Configuration with `a2dissite`
If you want to disable a specific site (for example, the default Apache site or any custom site you've created), you can use the following steps:
#### 1. List All Enabled Sites
To see which sites are currently enabled:
ls /etc/apache2/sites-enabled/
#### 2. Disable a Site
Use the `a2dissite` command followed by the site configuration name (without the `.conf` extension). For example, to disable the default site:
sudo a2dissite 000-default
Or, if you want to disable your custom site:
sudo a2dissite shareyourthoughts
To disable Adminer:
sudo a2dissite adminer
#### 3. Reload Apache to Apply Changes
After disabling the site, reload Apache for the changes to take effect:
sudo systemctl reload apache2
### Example: Disabling the Default Site and Keeping Custom Sites
Let's say you want to disable the default site and only keep `shareyourthoughts` and `adminer`:
sudo a2dissite 000-default
sudo systemctl reload apache2
### Notes
– Disabling a site does not delete its configuration file; it simply removes the symbolic link from `/etc/apache2/sites-enabled/` to `/etc/apache2/sites-available/`.
– You can always re-enable a site using the `a2ensite` command:
sudo a2ensite shareyourthoughts
sudo systemctl reload apache2
This way, you can easily manage which sites are active on your Apache server without deleting any configuration files.
1. **The default site is still enabled** and taking precedence over your custom site.
2. **The DocumentRoot is misconfigured**, or Apache is not pointing to the correct directory for your main site.
3. **Apache needs to be reloaded or restarted** after configuration changes.
Let's troubleshoot and fix this issue step by step.
### Step 1: Disable the Default Apache Site
If the default Apache site (`000-default.conf`) is still enabled, it may be taking precedence over your custom configuration. Disable it using:
sudo a2dissite 000-default
sudo systemctl reload apache2
### Step 2: Ensure Your Custom Site is Enabled
Make sure that your **`shareyourthoughts.conf`** configuration is enabled:
sudo a2ensite shareyourthoughts
sudo systemctl reload apache2
### Step 3: Verify the DocumentRoot in `shareyourthoughts.conf`
Ensure that your `shareyourthoughts.conf` file has the correct DocumentRoot pointing to your project directory (`/var/www/shareyourthoughts`).
Edit the file to verify:
sudo nano /etc/apache2/sites-available/shareyourthoughts.conf
The configuration should look something like this:
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName your-ec2-ip
DocumentRoot /var/www/shareyourthoughts
<Directory /var/www/shareyourthoughts>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/shareyourthoughts_error.log
CustomLog ${APACHE_LOG_DIR}/shareyourthoughts_access.log combined
</VirtualHost>
Make sure:
– The `DocumentRoot` is correctly set to `/var/www/shareyourthoughts`.
– The “ block matches the DocumentRoot.
### Step 4: Check Apache Configuration Syntax
To ensure there are no syntax errors in your Apache configuration:
sudo apachectl configtest
If everything is correct, you should see:
Syntax OK
### Step 5: Restart Apache
After making any changes, restart Apache:
sudo systemctl restart apache2
### Step 6: Clear Browser Cache
Sometimes, your browser might be showing a cached version of the Apache default page. Clear your browser cache or try accessing your site in an incognito window.
### Step 7: Check Permissions
Ensure the permissions are set correctly for your project folder:
sudo chown -R www-data:www-data /var/www/shareyourthoughts
sudo chmod -R 755 /var/www/shareyourthoughts
### Step 8: Verify by Accessing the Site
– Visit your EC2 IP in the browser:
http://your-ec2-ip
– Check if your main site is loading correctly.
By following these steps, your main site should no longer show the Apache default page and should instead display your `shareyourthoughts` project.
ServerAdmin dailymediain@gmail.com
DocumentRoot /var/www/shareyourthoughts/public
ServerName ec2-13-60-215-155.eu-north-1.compute.amazonaws.com
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
### Key Observations:
1. **DocumentRoot** is set to `/var/www/shareyourthoughts/public`, but the “ block is targeting `/var/www/shareyourthoughts`. This can cause permission issues.
2. The **PHP-FPM socket** configuration looks good, but let’s make sure the path is correct.
3. You may also need to set `ServerAlias` for easier access if you're not using the full AWS domain name.
### Updated Apache Configuration:
Here’s an improved version of your configuration:
<VirtualHost *:80>
ServerAdmin dailymediain@gmail.com
ServerName ec2-13-60-215-155.eu-north-1.compute.amazonaws.com
ServerAlias your-domain.com # Optional: Add your custom domain if you have one
DocumentRoot /var/www/shareyourthoughts/public
<Directory /var/www/shareyourthoughts/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# PHP-FPM Configuration
<FilesMatch ".php$">
SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost/"
</FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/shareyourthoughts_error.log
CustomLog ${APACHE_LOG_DIR}/shareyourthoughts_access.log combined
</VirtualHost>
### Explanation of Changes:
1. **Updated “ block**: Changed it to `/var/www/shareyourthoughts/public` to match your `DocumentRoot`.
2. **Added `ServerAlias`** (optional): This is helpful if you plan to use a custom domain. You can remove or adjust it based on your setup.
3. **Log Files**: Changed error and access logs to be specific for this site (`shareyourthoughts_error.log` and `shareyourthoughts_access.log`).
### Step-by-Step Guide to Apply Changes:
1. **Save the Configuration File**:
After editing the file, save and exit nano (`CTRL + X`, then `Y`, and `ENTER`).
2. **Disable the Default Site (if not already done)**:
sudo a2dissite 000-default
3. **Enable Your Custom Site**:
sudo a2ensite shareyourthoughts
4. **Test Apache Configuration**:
sudo apachectl configtest
– If it shows `Syntax OK`, proceed.
5. **Restart Apache**:
sudo systemctl restart apache2
6. **Check PHP-FPM Service** (Ensure it's running):
sudo systemctl status php8.3-fpm
If it’s not running, start it:
sudo systemctl start php8.3-fpm
7. **Adjust File Permissions (if needed)**:
sudo chown -R www-data:www-data /var/www/shareyourthoughts
sudo chmod -R 755 /var/www/shareyourthoughts
8. **Clear Browser Cache or Use Incognito Mode**:
Access your site:
http://ec2-13-60-215-155.eu-north-1.compute.amazonaws.com
By following these steps, your main site should load correctly without showing the default Apache page. Let me know if you encounter any issues!
### Step 1: Rename the File
1. Navigate to the directory where Adminer is stored. Assuming it is in `/var/www/adminer`:
cd /var/www/adminer
2. Rename the `adminer.php` file to `index.php`:
mv adminer.php index.php
### Step 2: Verify the Directory Structure
Ensure the `/var/www/adminer` directory contains the renamed `index.php` file:
ls -l /var/www/adminer
You should see:
-rw-r--r-- 1 www-data www-data 123456 Nov 16 index.php
### Step 3: Update the Apache Configuration (Optional)
If you already have an Apache alias for Adminer, no further configuration changes are needed. The alias will automatically use `index.php` because it’s the default file Apache serves in a directory.
Ensure your `/etc/apache2/sites-available/adminer.conf` is configured correctly:
Alias /adminer /var/www/adminer
<Directory /var/www/adminer>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
If no changes are required, reload Apache to apply the configuration:
sudo systemctl reload apache2
### Step 4: Test Adminer
Open a browser and visit:
http://your-ec2-ip/adminer
You should now see Adminer without needing to type `adminer.php`. The `index.php` file will be loaded by default.
### Notes
– Renaming the file to `index.php` won't affect Adminer's functionality.
– Ensure proper permissions for the file and folder:
sudo chown -R www-data:www-data /var/www/adminer
sudo chmod -R 755 /var/www/adminer
Let me know if you face any issues!
### Display Hidden Files
Run this command to list all files, including hidden ones:
ls -a
This will show all files in the directory, including `.env`.
—
### Verify `.env` File Existence
If `.env` is still not visible after using `ls -a`, it might not exist in the directory. To verify, you can:
1. **Check if the file exists**:
ls -al | grep .env
If no result is returned, the `.env` file is missing or has not been created.
2. **Create the `.env` File (if needed)**:
If it's missing and you need it for your Laravel or other project:
cp .env.example .env
—
### Check File Permissions
If the `.env` file exists but is not visible to your current user, it could be a permission issue. Check the permissions:
ls -l .env
If the file exists but you don’t have permission to read it, adjust the permissions:
sudo chmod 644 .env
sudo chown your-user:your-group .env
Replace `your-user:your-group` with the appropriate user and group (e.g., `ubuntu:ubuntu` for an EC2 instance).
—
### Common Locations for `.env`
If you’re working on a Laravel project, the `.env` file should be located in the root directory of the project (e.g., `/var/www/shareyourthoughts` for your setup). To navigate there and check:
cd /var/www/shareyourthoughts
ls -a
If `.env` is still not there, ensure it was copied from `.env.example`.
—
Let me know if this helps or if you need further assistance!