Deprecated: Creation of dynamic property wpdb::$categories is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$post2cat is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$link2cat is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 668

Deprecated: Return type of WP_Theme::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-theme.php on line 554

Deprecated: Return type of WP_Theme::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-theme.php on line 595

Deprecated: Return type of WP_Theme::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-theme.php on line 535

Deprecated: Return type of WP_Theme::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-theme.php on line 544

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-includes/comment-template.php on line 1745

Deprecated: wp_getimagesize(): Implicitly marking parameter $image_info as nullable is deprecated, the explicit nullable type must be used instead in /home/inovacao/public_html/yeapf.com/wp/wp-includes/media.php on line 5072

Deprecated: Return type of WP_REST_Request::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-request.php on line 960

Deprecated: Return type of WP_REST_Request::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-request.php on line 980

Deprecated: Return type of WP_REST_Request::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-request.php on line 992

Deprecated: Return type of WP_REST_Request::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-request.php on line 1003

Deprecated: Return type of WP_Block_List::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 151

Deprecated: Return type of WP_Block_List::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 175

Deprecated: Return type of WP_Block_List::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 164

Deprecated: Return type of WP_Block_List::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 186

Deprecated: Return type of WP_Block_List::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 138

Deprecated: Return type of WP_Block_List::offsetExists($index) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 75

Deprecated: Return type of WP_Block_List::offsetGet($index) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 89

Deprecated: Return type of WP_Block_List::offsetSet($index, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 110

Deprecated: Return type of WP_Block_List::offsetUnset($index) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 127

Deprecated: Return type of WP_Block_List::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php on line 199

Deprecated: Jetpack::setup_xmlrpc_handlers(): Implicitly marking parameter $xmlrpc_server as nullable is deprecated, the explicit nullable type must be used instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/class.jetpack.php on line 934

Deprecated: Automattic\Jetpack\Connection\Manager::setup_xmlrpc_handlers(): Implicitly marking parameter $xmlrpc_server as nullable is deprecated, the explicit nullable type must be used instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-manager.php on line 123

Deprecated: Creation of dynamic property Automattic\Jetpack\Connection\Manager::$error_handler is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/vendor/automattic/jetpack-connection/src/class-manager.php on line 93

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Instagram_Gallery::$is_wpcom is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-instagram-gallery.php on line 23

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Mailchimp::$wpcom_is_wpcom_only_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-mailchimp.php on line 17

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Tweetstorm_Gather::$wpcom_is_wpcom_only_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-tweetstorm-gather.php on line 21

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Tweetstorm_Gather::$is_wpcom is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/class-wpcom-rest-api-v2-endpoint-tweetstorm-gather.php on line 22

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Gutenberg_Available_Extensions::$wpcom_is_site_specific_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/gutenberg-available-extensions.php on line 20

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Memberships::$wpcom_is_wpcom_only_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/memberships.php on line 23

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Memberships::$wpcom_is_site_specific_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/memberships.php on line 24

Deprecated: Creation of dynamic property WPCOM_REST_API_V2_Endpoint_Subscribers::$wpcom_is_wpcom_only_endpoint is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/core-api/wpcom-endpoints/subscribers.php on line 15

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/extensions/blocks/podcast-player/podcast-player.php on line 160

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/extensions/blocks/podcast-player/podcast-player.php on line 160

Deprecated: Creation of dynamic property POMO_FileReader::$is_overloaded is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 26

Deprecated: Creation of dynamic property POMO_FileReader::$_pos is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 29

Deprecated: Creation of dynamic property POMO_FileReader::$_f is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 160

Deprecated: Creation of dynamic property MO::$_gettext_select_plural_form is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/translations.php on line 293

Deprecated: Creation of dynamic property Automattic\Jetpack\Sync\Queue::$random_int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/vendor/automattic/jetpack-sync/src/class-queue.php on line 38

Deprecated: Creation of dynamic property Automattic\Jetpack\Sync\Queue::$random_int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/vendor/automattic/jetpack-sync/src/class-queue.php on line 38

Deprecated: Creation of dynamic property Publicize_UI::$in_jetpack is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/publicize.php on line 53

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/widgets/migrate-to-core/image-widget.php on line 195

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/widgets/migrate-to-core/gallery-widget.php on line 56

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 130

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 131

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 135

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 136

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/calypsoify/class-jetpack-calypsoify.php on line 137

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 219

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 220

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 227

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 229

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 231

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 248

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 249

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 267

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 268

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 270

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 271

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 273

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/simple-payments/simple-payments.php on line 275

Deprecated: Creation of dynamic property POMO_FileReader::$is_overloaded is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 26

Deprecated: Creation of dynamic property POMO_FileReader::$_pos is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 29

Deprecated: Creation of dynamic property POMO_FileReader::$_f is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/streams.php on line 160

Deprecated: Creation of dynamic property MO::$_gettext_select_plural_form is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/pomo/translations.php on line 293

Deprecated: Creation of dynamic property WPCOM_Widget_Goodreads::$shelves is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/widgets/goodreads.php on line 33

Deprecated: DateTime::__construct(): Passing null to parameter #1 ($datetime) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/script-loader.php on line 333

Deprecated: Creation of dynamic property WP_Block_Type::$skip_inner_blocks is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property WP_Block_Type::$plan_check is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-type.php on line 347

Deprecated: Creation of dynamic property Jetpack_Shortcode_Unavailable::$shortcodes is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/shortcodes/unavailable.php on line 19

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Deprecated: Calling get_class() without arguments is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-http.php on line 328

Deprecated: Return type of Requests_Cookie_Jar::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 63

Deprecated: Return type of Requests_Cookie_Jar::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 73

Deprecated: Return type of Requests_Cookie_Jar::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 89

Deprecated: Return type of Requests_Cookie_Jar::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 102

Deprecated: Return type of Requests_Cookie_Jar::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie/Jar.php on line 111

Deprecated: http_build_query(): Passing null to parameter #2 ($numeric_prefix) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Transport/cURL.php on line 345

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 40

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 51

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 68

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 82

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 91

Deprecated: Requests_Cookie::parse_from_headers(): Implicitly marking parameter $origin as nullable is deprecated, the explicit nullable type must be used instead in /home/inovacao/public_html/yeapf.com/wp/wp-includes/Requests/Cookie.php on line 439

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: Creation of dynamic property Jetpack_Carousel::$localize_strings is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/modules/carousel/jetpack-carousel.php on line 353

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: Creation of dynamic property WP_Term::$cat_ID is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 378

Deprecated: Creation of dynamic property WP_Term::$category_count is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 379

Deprecated: Creation of dynamic property WP_Term::$category_description is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 380

Deprecated: Creation of dynamic property WP_Term::$cat_name is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 381

Deprecated: Creation of dynamic property WP_Term::$category_nicename is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 382

Deprecated: Creation of dynamic property WP_Term::$category_parent is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/category.php on line 383

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: preg_split(): Passing null to parameter #3 ($limit) of type int is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-content/plugins/jetpack/_inc/lib/class.media-summary.php on line 420

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/inovacao/public_html/yeapf.com/wp/wp-includes/wp-db.php on line 3030

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673

Warning: Cannot modify header information - headers already sent by (output started at /home/inovacao/public_html/yeapf.com/wp/wp-includes/class-wp-block-list.php:14) in /home/inovacao/public_html/yeapf.com/wp/wp-includes/rest-api/class-wp-rest-server.php on line 1673
{"id":583,"date":"2020-03-05T15:52:09","date_gmt":"2020-03-05T18:52:09","guid":{"rendered":"http:\/\/www.yeapf.com\/wp\/?p=583"},"modified":"2020-03-06T15:28:48","modified_gmt":"2020-03-06T18:28:48","slug":"criando-um-ambiente-de-desenvolvimento-lamp","status":"publish","type":"post","link":"http:\/\/www.yeapf.com\/wp\/?p=583","title":{"rendered":"Criando um ambiente de desenvolvimento LAMP"},"content":{"rendered":"

LAMP \u00e9 um acr\u00f4nimo representando Linux, Apache, MySQL e PHP<\/p>\n

Um ambiente LAMP nos d\u00e1 os elementos b\u00e1sicos para poder programar.<\/p>\n

Como o alvo \u00e9 programar sobre um servidor e n\u00e3o sobre ambiente Desktop, a instala\u00e7\u00e3o ser\u00e1 sem GUI mas fique livre para faze-lo. Eu mesmo n\u00e3o tenho recursos t\u00e3o abundantes assim para p\u00f4r interface gr\u00e1fica em um servidor que vou controlar via ssh.<\/p>\n

Escolhemos Ubuntu por ser o Linux mais simples de instalar e usar no dia a dia do desenvolvedor. Para produ\u00e7\u00e3o costumamos colocar CentOS que \u00e9 mais leve por\u00e9m \u00e0s vezes mais nojentinho de configurar.<\/p>\n

Se voc\u00ea j\u00e1 tem uma VM com Ubuntu, pode pular para “Instalando LAMP<\/strong>” l\u00e1 no final<\/p>\n

    \n
  1. \n

    Baixe a \u00faltima vers\u00e3o est\u00e1vel do Ubuntu<\/h3>\n

    No momento de escrever este artigo, estava na 18.04.4 LTS (Sempre escolha as vers\u00f5es 04 que tem maior durabilidade garantida pela Cannonical)<\/p>\n

    https:\/\/ubuntu.com\/download\/server<\/a><\/li>\n

  2. \n

    Crie uma m\u00e1quina virtual<\/h3>\n

    a. Verifique se o local de armazenamento existe<\/h5>\n

    No meu caso, eu deixo todas as m\u00e1quinas virtuais em uma pasta chamada ‘VirtualBoxes’ alocada na raiz do usu\u00e1rio; isto \u00e9: \/home\/esteban\/VirtualBoxes. Ent\u00e3o, e n\u00e3o tem uma pasta assim e quer cria-la fa\u00e7a como segue:<\/p>\n

    $ mkdir ~\/VirtualBoxes<\/code><\/pre>\n
    b. Crie sua m\u00e1quina virtual usando o seguinte comando:<\/h5>\n
    $ VBoxManage createvm --name MeuLAMP --ostype Debian_64 --register --basefolder ~\/VirtualBoxes\/ <\/code><\/pre>\n

    O VBoxManage vai responder alguma coisa assim:<\/p>\n

    Virtual machine 'MeuLAMP' is created and registered.\nUUID: 3156aee4-8a2e-46dd-ae69-54533c78ff5f\nSettings file: '\/Users\/estebandortta\/VirtualBoxes\/MeuLAMP\/MeuLAMP.vbox'<\/code><\/pre>\n
    c. Modifique ela para seus par\u00e2metros m\u00ednimos.<\/h5>\n

    No caso 512MB de RAM, IOAPIC ligado e uma interface de rede em modo bridge (ponte). Repare que no meu caso, a placa de rede que vai ser usada como ponte \u00e9 a chamada en1. Por isso que usei ela. No seu caso isso \u00e9 diferente.<\/p>\n

    Para obter uma lista das placas conectadas na sua m\u00e1quina, pode usar o seguinte comando:<\/span><\/p>\n

    $ ifconfig<\/span> | grep<\/span> \"^[a-z0-9]*\\:\"<\/span> | awk<\/span> '{ print $1 }'<\/span><\/span><\/pre>\n

    Uma vez determinado o nome, pode proceder como segue:<\/span><\/p>\n

    $ VBoxManage modifyvm MeuLAMP --ioapic on\n$ VBoxManage modifyvm MeuLAMP --memory 512 --vram 128\n$ VBoxManage modifyvm MeuLAMP --nic1 Bridged  --bridgeadapter1 en1<\/code><\/pre>\n

    Estes comandos, se bem executados, n\u00e3o devolvem coisa alguma na tela.<\/p>\n

    d. Agora vamos adicionar um disco<\/h5>\n

    Ele ser\u00e1 de tamanho t\u00edpico (70GB) para este tipo de servi\u00e7o mas pode ser menor ou maior. Depende de sua capacidade. N\u00e3o recomendo abaixo de 40GB. Repare que meu download ficou em ~\/Downloads\/OS\/Linux\/ubuntu-18.04.3-live-server-amd64.iso ent\u00e3o modifique conforme necess\u00e1rio.<\/p>\n

    $ VBoxManage createhd --filename ~\/VirtualBoxes\/MeuLAMP\/MeuLAMP_DISK.vdi --size 70000 --format VDI\n$ VBoxManage storagectl MeuLAMP --name \"SATA Controller\" --add sata --controller IntelAhci\n$ VBoxManage internalcommands sethduuid ~\/VirtualBoxes\/MeuLAMP\/MeuLAMP_DISK.vdi\n$ VBoxManage storageattach MeuLAMP --storagectl \"SATA Controller\" --port 0 --device 0 --type hdd --medium  ~\/VirtualBoxes\/MeuLAMP\/MeuLAMP_DISK.vdi\n$ VBoxManage storagectl MeuLAMP --name \"IDE Controller\" --add ide --controller PIIX4\n$ VBoxManage storageattach MeuLAMP --storagectl \"IDE Controller\" --port 1 --device 0 --type dvddrive --medium ~\/Downloads\/OS\/Linux\/ubuntu-18.04.3-live-server-amd64.iso\n$ VBoxManage modifyvm MeuLAMP --boot1 dvd --boot2 disk --boot3 none --boot4 none<\/code><\/pre>\n
    e. Configuramos acesso remoto<\/h5>\n

    O configuramos via vrde para podermos lidar com a tela dela no inicio e se alguma coisa acontece com ela durante o uso posterior. O porto (no caso 10004) \u00e9 da sua escolha apenas use um que n\u00e3o exista.<\/p>\n

    $ VBoxManage modifyvm MeuLAMP --vrde on\n$ VBoxManage modifyvm MeuLAMP --vrdemulticon on --vrdeport 10004<\/code><\/pre>\n
    f. Finalmente, inicie sua m\u00e1quina para poder configura-la<\/h5>\n
    $ VBoxManage startvm MeuLAMP<\/code><\/pre>\n

    Lembre que posteriormente, podemos usar este comando para iniciar ela “sem-cabe\u00e7a”. Ou seja, sem interface. Com isso vc poupar\u00e1 alguns recursos de CPU, GPU, RAM, etc. Usamos isso em produ\u00e7\u00e3o.<\/p>\n

    $ VBoxHeadless --startvm MeuLAMP<\/code><\/pre>\n<\/li>\n
  3. \n

    Coisas a serem feitas durante<\/u> a instala\u00e7\u00e3o<\/h3>\n
    a. Escolha a parti\u00e7\u00e3o que ocupa o disco inteiro e sem LVM.<\/h5>\n

    Em produ\u00e7\u00e3o \u00e9 o contr\u00e1rio. Ou seja, particionamos o disco diferente e usamos LVM que nos permite adicionar mais discos e n\u00e3o apenas mudar o tamanho.<\/p>\n

    b. Configure seu usu\u00e1rio.<\/h5>\n

    Este \u00e9 um usu\u00e1rio comum mas com direitos administrativos. N\u00e3o esque\u00e7a a senha mas tamb\u00e9m n\u00e3o a anote no post-it. Chegado o caso anote ela na manga da camisa. A mulher vai se encarregar de fixar ela na sua mem\u00f3ria.<\/p>\n

    b. N\u00e3o esque\u00e7a de instalar o SSH (Ele vai oferecer OpenSSH logo ap\u00f3s particionar o disco)<\/h5>\n

    \u00c9 importante ter seu SSH instalado pois \u00e9 por meio dele que voc\u00ea vai acessar sua m\u00e1quina. Sim, voc\u00ea n\u00e3o est\u00e1 sendo treinado para ser um gnutellinha da vida. Um acesso SSH te libera da exig\u00eancia brutal de ter uma banda muito larga j\u00e1 que os comandos e seus retornos s\u00e3o textuais.<\/p>\n

    c. Deixe o restante como est\u00e1.<\/h5>\n

    Se precisar de proxy, indique no momento adequado.<\/p>\n

    d. Aguarde at\u00e9 o fim.<\/h5>\n

    Ele vai demorar baixando as atualiza\u00e7\u00f5es de seguran\u00e7a. Deixe rolar. Melhor agora do que depois.<\/p>\n

    c. Caso a atualiza\u00e7\u00e3o der problemas<\/strong> escolha “Cancel Update and Reboot”<\/h5>\n<\/li>\n
  4. \n

    Coisas a serem feitas ap\u00f3s a instala\u00e7\u00e3o<\/h3>\n

    Quando chegue ao final da instala\u00e7\u00e3o, o sistema instalado vai reiniciar. Observe que ele solicita para remover o disco de instala\u00e7\u00e3o. Como colocamos o disco de instala\u00e7\u00e3o como “CD-ROM”, o instalador j\u00e1 se encarregou de “ejetar” o mesmo. \u00c9 s\u00f3 reiniciar (dando ENTER na VM) e boa.<\/p>\n

    Assim que a m\u00e1quina reinicie, ingresse nela usando seu usu\u00e1rio e senha cadastrado no primeiro passo.<\/p>\n

    Na primeira vez, ele vai estar ainda configurando algumas coisas, ent\u00e3o tenha paci\u00eancia.<\/p>\n

    A \u00fanica coisa que interessa dessa entrada, \u00e9 pegar o IP dela para poder acessa-la via SSH.<\/p>\n

    Obtemos esse IP usando o comando ifconfig da seguinte maneira:<\/p>\n

    esteban@meulamp:~$ ifconfig<\/code><\/pre>\n

    Ele nos devolver\u00e1 alguma coisa assim:<\/p>\n

    enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500\n       inet 192.168.0.152  netmask 255.255.255.0  broadcast 192.168.0.255\n       inet6 fe80::a00:27ff:fe07:8f8b  prefixlen 64  scopeid 0x20<link>\n       ether 08:00:27:07:8f:8b  txqueuelen 1000  (Ethernet)\n       RX packets 855  bytes 642531 (642.5 KB)\n       RX errors 0  dropped 2  overruns 0  frame 0\n       TX packets 243  bytes 30082 (30.0 KB)\n       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0\n\nlo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536\n       inet 127.0.0.1  netmask 255.0.0.0\n       inet6 ::1  prefixlen 128  scopeid 0x10<host>\n       loop  txqueuelen 1000  (Local Loopback)\n       RX packets 104  bytes 8136 (8.1 KB)\n       RX errors 0  dropped 0  overruns 0  frame 0\n       TX packets 104  bytes 8136 (8.1 KB)\n       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0<\/code><\/pre>\n

    Mas desse trambolho todo s\u00f3 nos interessa o IP da primeira placa. A ‘lo’ \u00e9 uma placa virtual que existe em todo linux para que a pilha TCP\/IP funcione. (Lembre que X11 \u00e9 um servidor que roda no seu pr\u00f3prio micro e sobre TCP\/IP. Assim como ele h\u00e1 um monte de programas que esperam que vc tenha uma pilha TCP\/IP ativa. Por isso ela est\u00e1 embutida).<\/p>\n

    Ent\u00e3o, simplificamos para o seguinte comando para obtermos o IP da m\u00e1quina:<\/p>\n

    esteban@meulamp:~$ ifconfig | grep -w inet | grep -vw 127 | awk '{ print $2 }'<\/code><\/pre>\n

    Com este comando mais simples, direto, eficiente, bonito, f\u00e1cil de lembrar, obtemos apenas o IP da m\u00e1quina. No meu caso a sa\u00edda se resume a isto aqui:<\/p>\n

    192.168.0.152<\/code><\/pre>\n

    Agora, devemos reconhecer que \u00e9 um saco ter que abrir a m\u00e1quina virtual para saber qual IP que ele pegou. Por outro lado, precisamos de essa informa\u00e7\u00e3o para trabalhar. Comigo acontece de que geralmente n\u00e3o posso deixar ela com IP fixo j\u00e1 que uso ela em diferentes redes.<\/p>\n

    Uma forma de solucionar isso, \u00e9 que a pr\u00f3pria m\u00e1quina mostre o IP que pegou na tela antes do login. Desta forma, apenas abrir a tela da VM (Lebre que vamos usar sem tela) j\u00e1 nos mostra esse IP. (Eu n\u00e3o sei voc\u00eas, mas eu esque\u00e7o dos IPs fixos tb, ent\u00e3o eu coloco em tudo quanto \u00e9 m\u00e1quina)<\/p>\n

    Para conseguir isso, vamos modificar o arquivo \/etc\/issue que \u00e9 o arquivo que \u00e9 mostrado no fim do processo de inicializa\u00e7\u00e3o e logo antes do login.<\/p>\n

    Como minha placa chama-se enp0s3<\/code> (Detesto esses nomes novos, gostava de quando eram eth0 por exemplo) o meu arquivo \/etc\/issue fica assim:<\/p>\n

    Ubuntu 18.04.4 LTS n l\nenp0s3: 4{enp0s3}\n------------------------------------------<\/code><\/pre>\n

    Ao reiniciar a m\u00e1quina virtual, l\u00e1 estar\u00e1 a informa\u00e7\u00e3o que preciso para poder trabalhar.<\/li>\n

  5. \n

    Configurando seu acesso via SSH<\/h3>\n

    Usar uma m\u00e1quina virtual via tela \u00e9 pedir para sofrer. Ela \u00e9 mais lenta, n\u00e3o tem jeito.<\/p>\n

    Mesmo se instalou a GUI (como \u00e9 o caso de Windows Desktop por exemplo que n\u00e3o tem como instalar sem interface gr\u00e1fica) o melhor \u00e9 o acesso remoto. Claro, h\u00e1 exe\u00e7\u00f5es, mas a regra \u00e9 essa.<\/p>\n

    Bem, antes de se apaixonar pelo ssh, voc\u00ea tem que ser triducidado por ele.<\/p>\n

    Se seu ambiente \u00e9 Windows, um cliente ssh pot\u00e1vel \u00e9 o PuTTY (https:\/\/putty.org<\/a>) mas o que eu mais gosto \u00e9 Cygwin (https:\/\/www.cygwin.com<\/a>). Agora, com isso de que o Windows10 j\u00e1 vem com bash (e Ubuntu) embarcado, imagino que o melhor seja usar a op\u00e7\u00e3o que vem embarcada.<\/p>\n

    Eu vou supor que est\u00e1 usando Linux, Cygwin ou bash embarcado.<\/p>\n

    a. Acesse sua m\u00e1quina virtual desde a linha de comandos da sua m\u00e1quina. No meu caso fica assim:<\/h5>\n
    $ ssh esteban@192.168.0.152<\/code><\/pre>\n

    Por ser a primeira vez, o meu bash responde assim:<\/p>\n

    The authenticity of host '192.168.0.152 (192.168.0.152)' can't be established.\nECDSA key fingerprint is SHA256:poNetFdUSSEYn8tH2Mu7Vy7NLdq25lFaCJ449rt2bjw.\nAre you sure you want to continue connecting (yes\/no)?<\/code><\/pre>\n

    Ao que eu respondo que sim em ingl\u00eas fluente. Ou seja “yes” e n\u00e3o apenas “y”<\/p>\n

    Com isso o servidor fica registrado na lista de alvos conhecidos pelo ssh<\/p>\n

    Logo ap\u00f3si digito a senha que registrei na hora da instala\u00e7\u00e3o e pronto, estou nele.<\/p>\n

    Mas vamos sair, porque -n\u00e3o sei voc\u00eas- mas eu detesto ter que lembrar de senhas e tal.<\/p>\n

    Para sair, digitamos exit<\/code> ou usamos ctrl-d<\/code> que d\u00e1 na mesma.<\/p>\n

    S\u00d3 CONTINUE SE VOLTOU NA SUA M\u00c1QUINA M\u00c3E<\/strong><\/p>\n

    b. Tem ou n\u00e3o um par de chaves na sua m\u00e1quina m\u00e3e?<\/h5>\n

    Pode acontecer que voc\u00ea n\u00e3o tenha um par de chaves criadas. Para verificar se tem, use o seguinte comando:<\/p>\n

    $ ls ~\/.ssh\/*<\/code><\/pre>\n

    Se ele mostra dois arquivos id_rsa<\/code> e id_rsa.pub<\/code>, voc\u00ea j\u00e1 tem as chaves criadas e n\u00e3o h\u00e1 de que se preocupar (a n\u00e3o ser, claro que tenha criado as chaves com senha e as tenha esquecido)<\/p>\n

    Se ele mostrar alguma coisa parecida com a imagem abaixo \u00e9 porque voc\u00ea n\u00e3o tem o par de chaves:<\/p>\n

    ls: cannot access '\/home\/esteban\/.ssh\/': No such file or directory<\/code><\/pre>\n

    Caso, ent\u00e3o, tenha que criar esse par de chaves, o fazemos usando o seguinte comando:<\/p>\n

    $ ssh-keygen<\/code><\/pre>\n

    Deixe que o dem\u00f4nio do usu\u00e1rio Windows entre em voc\u00ea e d\u00e9 ENTER at\u00e9 o final. Dessa forma criar\u00e1 um par de chaves que n\u00e3o precisam senha para serem usadas. (Em produ\u00e7\u00e3o voc\u00ea coloca senha nelas)<\/p>\n

    A sa\u00edda fica mais ou menos assim:<\/p>\n

    Generating public\/private rsa key pair.\nEnter file in which to save the key (\/home\/esteban\/.ssh\/id_rsa): \nCreated directory '\/home\/esteban\/.ssh'.\nEnter passphrase (empty for no passphrase): \nEnter same passphrase again: \nYour identification has been saved in \/home\/esteban\/.ssh\/id_rsa.\nYour public key has been saved in \/home\/esteban\/.ssh\/id_rsa.pub.\nThe key fingerprint is:\nSHA256:1h2\/DAEBwxLLwiKYFSyY3FSiFtWRAvO1t8snCgGxCAY esteban@meulamp\nThe key's randomart image is:\n+---[RSA 2048]----+\n|EOB=o++oo.o.     |\n|O+O+o+o... .     |\n|=*..+.oo    o    |\n|.... .. .. . +   |\n|   .   .S . o .  |\n|    . ...    o . |\n|   .   + .    o  |\n|    . . o        |\n|     .           |\n+----[SHA256]-----+<\/code><\/pre>\n
    c. Copie sua chave p\u00fablica para a VM<\/h5>\n

    Para poder facilitar o acesso via SSH, voc\u00ea agora vai copiar sua chave p\u00fablica para a m\u00e1quina que criou. No meu caso fica assim:<\/p>\n

    $ ssh-copy-id esteban@192.168.0.152<\/code><\/pre>\n

    E ele produzir\u00e1 uma sa\u00edda semelhante a esta<\/p>\n

    \/usr\/bin\/ssh-copy-id: INFO: Source of key(s) to be installed: \"\/Users\/estebandortta\/.ssh\/id_rsa.pub\"\n\/usr\/bin\/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed\n\/usr\/bin\/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys\nesteban@192.168.0.152's password: \n\nNumber of key(s) added:        1\n\nNow try logging into the machine, with:   \"ssh 'esteban@192.168.0.152'\"\nand check to make sure that only the key(s) you wanted were added.<\/code><\/pre>\n

    Eu digitei a senha da VM quando me pediu. Se voc\u00ea criou seu par de chaves com senha, vai pedir essa senha tb. Ai vc vai lembrar o porque que eu disse para colocar sem senha.<\/p>\n

    Bem, a partir deste momento entrar na sua m\u00e1quina virtual via ssh ser\u00e1 t\u00e3o simples como fazer<\/p>\n

    $ ssh esteban@192.168.0.152<\/code><\/pre>\n

    E ele deve ir sem pedir senha (a n\u00e3o ser que o par de chaves…bla bla bla)<\/li>\n

  6. \n

    Instalando o LAMP<\/h3>\n

    Entraremos na virtual. Use o comando similar ao seguinte<\/p>\n

    $ ssh esteban@192.168.0.152<\/code><\/pre>\n
    a. Instale o b\u00e1sico<\/h5>\n

    O que \u00e9 o b\u00e1sico no LAMP?<\/p>\n

    Bom, sendo que est\u00e1 no Linux, s\u00f3 falta AMP (Apache, MySQL e PHP)<\/p>\n

    Existem pacotes prontos que faremos bem em evitar pois buscamos aprender o que \u00e9 – de fato – importante.<\/p>\n

    Primeiro atualizaremos a base instalada (isso pode levar um tempinho a primeira vez)<\/p>\n

    esteban@meulamp:~$ sudo apt-get update -y<\/code><\/pre>\n

    Ele vai pedir a senha de usu\u00e1rio para poder fazer sudo<\/code><\/p>\n

    Em lugar do MySQL vamos instalar o MariaDB. (MariaDB \u00e9 um fork de MySQL que o criador de MySQL fez quando abandonou a Oracle. O criador do MySQL tinha ido para a Oracle contando com que a Oracle ia manter seus tent\u00e1culos longe e manter o MySQL aberto. Como isso n\u00e3o aconteceu, ele foi embora. Perdeu o nome MySQL mas o software \u00e9 o mesmo… e manteve a dignidade que – nos tempos que correm – digamos que \u00e9 importante)<\/p>\n

    esteban@meulamp:~$ sudo apt-get install apache2 php mariadb-server mariadb-client php-mysql -y\n<\/code><\/pre>\n
    Dependendo de sua distribui\u00e7\u00e3o, pode ser que o apache n\u00e3o esteja configurado para iniciar junto com o sistema. Habilite o apache e inicie ele com estes dois comandos:\n\n<\/span>esteban@meulamp:~$ sudo<\/span> systemctl enable apache2<\/span>\nesteban@meulamp:~$ sudo<\/span> systemctl start<\/span> apache2\n<\/span><\/pre>\n

    Dessa forma, quando voc\u00ea reiniciar sua m\u00e1quina, o apache estar\u00e1 funcionando mas para continuar agora, ele tamb\u00e9m estar\u00e1 funcionando.<\/span><\/p>\n

    \nb.Configure o acesso ao banco de dados<\/h5>\n

    Uma vez instalado, \u00e9 bom configurar o banco de dados. Basicamente precisamos que ele seja seguro o suficiente como para trabalhar, mas tb que n\u00e3o encha o saco com muitas exig\u00eancias.<\/p>\n

    esteban@meulamp:~$ sudo mysql_secure_installation<\/code><\/pre>\n

    Assim que ele \u00e9 instalado, o root est\u00e1 sem senha. Ent\u00e3o quando perguntado, crie uma senha para root.<\/p>\n