Para desactivar el firewall que por defecto viene activado en las máquinas virtuales de Oracle hay que lanzar estos dos comandos.
sudo iptables -F
sudo netfilter-persistent save
Para desactivar el firewall que por defecto viene activado en las máquinas virtuales de Oracle hay que lanzar estos dos comandos.
sudo iptables -F
sudo netfilter-persistent save
Para poder hacer un import del bootstrap y poder usarlo hay que indicar esto en el app.js, muy importante el «window.bootstrap» ya que si no, no podemos usarlo en la sección de scripts.
import * as bootstrap from 'bootstrap';
window.bootstrap = bootstrap;
Para usar el «S3» de Oracle, hay que crear al igual que en Amazon una clave y secret para indicarla en el .env.
Hay que tener en cuenta 3 cosas:
Toda esta información se localiza fácilmente en la pantalla del Bucket.
Así quedaría un .env operativo para Oracle Cloud
AWS_ACCESS_KEY_ID=386***************************
AWS_SECRET_ACCESS_KEY=7CG**********************************************
AWS_DEFAULT_REGION=eu-paris-1
AWS_BUCKET=NOMBREDELBUCKET
AWS_ENDPOINT=https://NOMBREDELNAMESPACE.compat.objectstorage.eu-paris-1.oraclecloud.com
AWS_URL=https://NOMBREDELNAMESPACE.compat.objectstorage.eu-paris-1.oraclecloud.com/NOMBREDELBUCKET/
AWS_USE_PATH_STYLE_ENDPOINT=true
Para empezar a utilizar S3 de Amazon en Laravel es muy fácil.
Lo primero es crear un usuario en el apartado de IAM con permisos de s3full
Después creamos unas credenciales para acceder desde fuera y el KEY y el SECRET es lo que tenemos que poner en el .env
OJO hay que poner en el .env también el bucket y la region (ojo a esto).
Por ejemplo:
AWS_ACCESS_KEY_ID=A**************
AWS_SECRET_ACCESS_KEY=z****************************
AWS_DEFAULT_REGION=eu-west-1
AWS_BUCKET=exports-tentless-chaps-nerine ( el nombre de tu bucket )
AWS_USE_PATH_STYLE_ENDPOINT=false
Muy importante, por defecto aunque se ponga a público el bucket, cada vez que se sube un objeto por defecto se pone privado, hay que meter esta política específicamente para que cada vez que se haga una subida por defecto el fichero/foto se muestre sin problemas usando el Storage::disk(‘s3’)->url($row->imagen).
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "ARNDELBUCKET QUE SE VE EN LA PANTALLA DE AWA ARRIBA/*"
}
]
}
cd /root/
wget https://nodejs.org/dist/v18.13.0/node-v18.13.0-linux-x64.tar.gz
tar xf node-v18.13.0-linux-x64.tar.gz
cd node-v18.13.0-linux-x64
mv bin/* /usr/local/bin
mv lib/* /usr/local/lib
node -v
npm -v
npx -v
openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
openssl x509 -in ca.crt -noout -text
openssl genrsa -des3 -out ayuntamientoquesea.key 4096
openssl req -new -key ayuntamientoquesea.key -out ayuntamientoquesea.csr
openssl x509 -req -days 365-in ayuntamientoquesea.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out ayuntamientoquesea.crt
openssl pkcs12 -export -out ayuntamientoquesea.pfx -inkey ayuntamientoquesea.key -in ayuntamientoquesea.crt -certfile ca.crt
Las líneas básicas para activar el doble factor deben aplicar en cada fichero de cada web del sites_availables, indicando la ruta exacta de donde está ubicado el certificado propio nuestro.
Si estamos usando HestiaCP hay que tocar las plantillas y configurar el sitio para que use esta plantilla. Normalmente lo que se suele hacer es clonar la plantilla que estamos usando (por ejemplo laravel) y a esa plantilla clonada meterle estas líneas. Las plantillas en hestia se encuentran en
cd /usr/local/hestia/data/templates/web/nginx/php-fpm/
Las líneas son las siguientes, a completar con lo indicado en el ENS
ssl_client_certificate /etc/nginx/innova/ca.crt;
ssl_verify_client on;
El nombre del ayuntamiento hay que meterlo en Section
El nombre de swpolicial en «Unidad Organizativa Software«
En el «asunto» que es «Company» hay que poner el «nombre del ayuntamiento – swpolicial«
El emisor si está bien poner «SWPOLICIAL»
El número de serie podría ser el 0000 (0007 almonte) IDAYUNTAMIENTO YMD de cuando se genera
Use the following steps to install Bootstrap 5 in the laravel 9 with Vite.
Installing a fresh new laravel application, so head over to the terminal, type the command, and create a new laravel app.
composer create-project --prefer-dist laravel/laravel:^9.0 laravel9-bootstrap5-vite
or, if you have installed the Laravel Installer as a global composer dependency:
laravel new laravel9-bootstrap5-vite
Next, you need to run the below command in your terminal
composer require laravel/ui
php artisan ui bootstrap --auth
Run the following command to install frontend dependencies:
npm install
First, you need to change vite.config.js and add the bootstrap 5 path & remove resources/css/app.css
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
import path from 'path'
export default defineConfig({
plugins: [
laravel([
'resources/js/app.js',
]),
],
resolve: {
alias: {
'~bootstrap': path.resolve(__dirname, 'node_modules/bootstrap'),
}
},
});
We need to use import
instead of require
.
import loadash from 'lodash'
window._ = loadash
import * as Popper from '@popperjs/core'
window.Popper = Popper
import 'bootstrap'
/**
* We'll load the axios HTTP library which allows us to easily issue requests
* to our Laravel back-end. This library automatically handles sending the
* CSRF token as a header based on the value of the "XSRF" token cookie.
*/
import axios from 'axios'
window.axios = axios
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
/**
* Echo exposes an expressive API for subscribing to channels and listening
* for events that are broadcast by Laravel. Echo and event broadcasting
* allows your team to easily build robust real-time web applications.
*/
// import Echo from 'laravel-echo';
// window.Pusher = require('pusher-js');
// window.Echo = new Echo({
// broadcaster: 'pusher',
// key: process.env.MIX_PUSHER_APP_KEY,
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
// forceTLS: true
// });
Now you need to import bootstrap 5 SCSS path in you resources/js/app.js or resources/js/bootstrap.js
resources/js/app.js
import './bootstrap';
import '../sass/app.scss'
When using Vite, you will need to use the @vite Blade directive instead of the mix() helper. remove mix helper and add @vite directive.
<link rel="stylesheet" href="{{ mix('css/app.css') }}">
<script src="{{ mix('js/app.js') }}" defer></script>
use @vite directive
@vite(['resources/js/app.js'])
views/layouts/app.blade
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Fonts -->
<link rel="dns-prefetch" href="//fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet">
@vite(['resources/js/app.js'])
</head>
<body>
<div id="app">
<nav class="navbar navbar-expand-md navbar-light bg-white shadow-sm">
<div class="container">
<a class="navbar-brand" href="{{ url('/') }}">
{{ config('app.name', 'Laravel') }}
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="{{ __('Toggle navigation') }}">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<!-- Left Side Of Navbar -->
<ul class="navbar-nav me-auto">
</ul>
<!-- Right Side Of Navbar -->
<ul class="navbar-nav ms-auto">
<!-- Authentication Links -->
@guest
@if (Route::has('login'))
<li class="nav-item">
<a class="nav-link" href="{{ route('login') }}">{{ __('Login') }}</a>
</li>
@endif
@if (Route::has('register'))
<li class="nav-item">
<a class="nav-link" href="{{ route('register') }}">{{ __('Register') }}</a>
</li>
@endif
@else
<li class="nav-item dropdown">
<a id="navbarDropdown" class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" v-pre>
{{ Auth::user()->name }}
</a>
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
{{ __('Logout') }}
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" class="d-none">
@csrf
</form>
</div>
</li>
@endguest
</ul>
</div>
</div>
</nav>
<main class="py-4">
@yield('content')
</main>
</div>
</body>
</html>
You need to npm run build command to create asset bootstrap 5.
npm run build
Now open a new terminal and execute the following command from your terminal to run the development server.
php artisan serve
Para hacerlo funcionar en desarrollo hay que apuntar un subdominio específico para el vite e instalar el plugin de ssl del mkcert que genera un certificado auto signed para ese subdominio.
Igualmente hay que ver el código fuente y darle al menos una vez a aceptar el certificado.
https://github.com/liuweiGL/vite-plugin-mkcert
npm install vite-plugin-mkcert -D
My final vite.config.js
file looked like this:
import laravel from 'laravel-vite-plugin'
import { defineConfig } from 'vite'
import mkcert from'vite-plugin-mkcert'
export default defineConfig({
server: {
https: true,
host: 'vite.myproject.test',
},
plugins: [
mkcert(),
laravel({
input: [
'resources/css/app.css',
'resources/js/app.js',
],
refresh: true,
}),
],
})
apt install php8.1-bcmath php8.1-bz2 php8.1-cli php8.1-common php8.1-curl php8.1-dev php8.1-fpm php8.1-imap php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-pgsql php8.1-readline php8.1-soap php8.1-sqlite3 php8.1-xml php8.1-xmlrpc php8.1-zip php8.1-gd php8.1-igbinary php8.1-imagick php8.1-memcached php8.1-msgpack
cp /etc/php/8.1/fpm/pool.d/www.conf /etc/php/8.1/fpm/pool.d/aws.conf
sed -i 's/[www]/[aws]/g' /etc/php/8.1/fpm/pool.d/aws.conf
sed -i 's/www-data/aws/g' /etc/php/8.1/fpm/pool.d/aws.conf
sed -i 's/php8.1-fpm/php8.1-fpm-aws/g' /etc/php/8.1/fpm/pool.d/aws.conf
service php8.1-fpm reload
sed -i 's/php7.4-fpm-aws/php8.1-fpm-aws/g' /usr/local/openresty/nginx/sites/sitiocreadoenmoss.conf
service openresty restart
su root
sed -i 's/php7.4-fpm-aws/php8.1-fpm-aws/g' /usr/local/openresty/nginx/sites/sitiocreadoenmoss.conf
service openresty restart
Habilitar puertos firewall
sudo iptables -F
sudo netfilter-persistent save
Descargar instalador
wget https://raw.githubusercontent.com/hestiacp/hestiacp/release/install/hst-install.sh
Instalar hestiacp con su script y todo lo que se necesite, para nuestro ejemplo Nginx + Php + Mysql. Para personalizar hay que ir a la web de ayuda para ello. Para que no salga advertencia de que ya hay un usuario admin hay que añadir al final --force
https://gabizz.github.io/hestiacp-scriptline-generator/
sudo bash hst-install.sh --apache no --phpfpm yes --multiphp yes --vsftpd no --proftpd no --named no --mysql yes --postgresql no --exim no --dovecot no --sieve no --clamav no --spamassassin no --iptables yes --fail2ban yes --quota no --api no --interactive yes --with-debs no --port 8083 --hostname hestiacp.innovacreaciones.es --email info@innovacreaciones.es --password 123456 --lang es --force
El puerto por defecto al admin es 8083
Crear el usuario con el que se van a gestionar las webs, por ejemplo aws
Hay que agregar la llave ssh de Cloud9 a este usuario, desde el panel de hestia.
Hay que instalar node y npm siguiendo la guía de instalación con nvm de DigitalOcean y previamente hay que conectarse como el usuario antes creado (aws) ya que se instala de manera «local» para cada usuario.
https://www.digitalocean.com/community/tutorials/como-instalar-node-js-en-ubuntu-18-04-es
Requisitos PREVIOS para AWS CLOUD9apt install nodejs
apt install python
apt install nodejs
apt install libevent-dev
sudo apt-get install -y build-essential
Agregar usuario aws como sudo para que el instalador no falleusermod -aG sudo aws
Para tener composer hay que añadirlo con un comando de hestiacp que hay que ejecutar como root/usr/local/hestia/bin/v-add-user-composer aws
Se instala en la carpeta del usuario .composer de manera local por lo tanto tenemos que agregar un alias para poder usarlo normalmente con «composer» y para hacerlo permanente lo agregamos como primera línea en el fichero del bashnano ~/.bashrc
alias composer="/home/aws/.composer/composer"
Para acceder remotamente hay que configurar en el panel de hestiacp el puerto 3306 habilitado en la parte de Configuración / Contafuegos y tocar el fichero de configuración para comentar la línea de bind-address
/etc/mysql/mariadb.conf.d/50-server.cnf #Instead of skip-networking the default is now to listen only on #localhost which is more compatible and is not less secure. #bind-address = 127.0.0.1 systemctl restart mysql.service systemctl daemon-reload
Para evitar que falle en Chrome al intentar acceder al admin con el puerto 8083 indicando que no es seguro el certificado hay que ejecutar estos dos comandos como root
v-change-sys-hostname host.domain.tld
v-add-letsencrypt-host
Se pueden agregar todos estos alias al bashrc o al zshrc para poder usar por consola rápidamente cada versión específica de cada web.
alias composer="/home/aws/.composer/composer"
alias composer7="/usr/bin/php7.4 /home/aws/.composer/composer"
alias composer8="/usr/bin/php8.2 /home/aws/.composer/composer"
alias php7="/usr/bin/php7.4"
alias php8="/usr/bin/php8.2"